Java static静态属性和静态方法内存分析和注意事项静态方法不能调用非静态属性和非静态方法,普通方法可以调用静态属性和方法
2017-10-08 23:17
537 查看
Java static 静态属性和方法
1、静态属性和方法从属于类,不从属与对象2、不能在静态方法中调用非静态变量和非静态方法
3、可以在普通方法中调用静态属性和方法
我们以下面的这个简单的Student类为例
public class Student { //普通属性 private String name; //静态属性又称类属性 private static String id; public Student(String name){ this.name = name; } //静态方法又称类方法 public static void study() { System.out.println(id); } //普通方法 public void doHomework() { } }
那么我们来对下面这个程序来做一下内存分析
Student s1 = new Student("张三");
我们需要注意到的是在通过类模板构建对象的时候,对象中是不包含static静态属性和方法的信息的,很简单,因为static属性和方法从属于类,可以通过类名.例如Student.study()来直接调用
Student.id
以上代码的内存分析就是直接在Student类模板中的static属性和变量专区查找指定的静态属性和方法,而无需通过s1对象
静态方法不能调用非静态属性或非静态方法
例如以下的代码是不合法的public static void study() { System.out.println(name);//这是不合法的,静态方法不能调用非静态属性 }
由于name是普通方法,外界要操纵普通属性必须通过对象,可以简单的理解为普通属性从属于对象,由于static方法从属于类,所以在静态方法中无法获取普通属性和普通方法
非静态方法可以调用静态属性或静态方法
例如以上面的例子为例,一下的代码是合理的public void doHomework() { study(); System.out.println(id); }
原因在于,普通方法从属于对象,可以通过这个对象确定方法区的类模板,知道了这个类模板,作为这个类模板中的一部分,静态属性和静态方法自然而然就可以访问到
相关文章推荐
- 关于静态方法不能调用类中的非静态属性的理解
- 静态方法不能直接调用实例方法和变量,但可以间接调用(即在静态方法中创建类的实例,然后调用)
- (20)static用法、特点、与非静态的区别、使用注意事项、利弊、什么时候用、对主函数的理解、对已封装好的类方法调用的理解
- 接口中的静态方法不能被实现类继承和子接口继承,但是接口中的非静态的默认方法可以被实现类继承。
- cocos2d-x调用java中非静态方法以及静态方法注意事项以及示例
- 调用静态方法是不能用this关键字的。直接使用类名就可以了
- 今天发现c#中的实例后的对象是不能调用静态方法,以前学Java的时候是可以的.
- static方法可以直接从普通方法(regular method)中调用,但是普通方法不能直接从static方法中调用,为什么?
- 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- 今天发现c#中的实例后的对象是不能调用静态方法,以前学Java的时候是可以的.
- 为什么java静态方法不能调用普通方法?普通方法能调用静态方法?
- Java - 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- 静态方法不能调用非静态变量,非静态方法可以引用静态变量
- 面向对象银角大王补充2-self就是调用当前方法的对象-静态字段,公有属性-封装的理解-继承的理解,普通方法,静态方法
- 类实例化对象可以访问静态(static)方法,但是不能访问静态属性。
- ognl调用静态方法用法以及注意事项
- C#调用Matlab引擎详细方法以及注意事项
- [java]静态方法不能调用静态变量
- 静态代码块,静态属性,静态方法,普通代码块,普通方法,普通属性,构造方法的加载顺序及执行顺序
- PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子