一、区分类变量、类方法、实例变量、实例方法
1、成员变量和成员方法
首先成员变量和成员方法是范围最大的定义:即成员变量包含实例变量和类变量。
成员方法包含类方法和实例方法。
2、类方法和实例方法
类方法:就是类里面有static修饰的成员方法。类方法可以直接调用类变量和类方法。但是不能直接调用实例方法和实例变量。而且不能使用this关键字,没有实例存在,不知道引用哪一个实例。
实例方法就是没有static修饰的成员方法。实例方法可以直接访问实例变量和直接调用实例方法;实例方法虽然可以直接调用类变量和类方法,但是不被建议。
3、类变量和实例变量
类变量:
是不用新建实例,直接通过类调用的变量。特点就是有static修饰。也叫静态变量。一般被静态方法(类方法)调用。
实例变量:
是新建了实例后才能够使用的变量。可以直接被实例方法调用。
两者的区别是:
对于类变量,系统为类变量分配一次存储空间,所有实例对象共享一个类变量。
实例变量则是在类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。
二、什么时候有默认值
一般来说非final修饰的成员变量在声明时没有赋值时,系统会给非final修饰的成员变量添加初始值。
final修饰的成员变量在声明时没有初始化值,会报错。
所有的局部变量在使用前都要赋值。
代码如下
public class Test_init {
public float f;
public long lo;
public char c;
public boolean b;
public static int i;
//public static final int k;
public Test_init(){
System.out.println("float:" + f + ",long:" + lo+ " ");
System.out.println("char:" + c + ",boolean:" + b);
System.out.println("static:" + i);
}
public static void main(String[] args) {
int i;
i = 10;
Test_init t = new Test_init();
System.out.println("局部:" + i);
}
}
运行结果如下:
另外在牛客那里做题有一道题可以重新分析一下
System.out.println(b);```
`boolean b = true?false:true==true?false:true`
这句话可以看成
`boolean b = true?false:(true==true?false:true)`
由于?:的优先级比=高,且与操作的结合性是从右到左,但是运算是从左至右的,故输出FALSE
![图片.png](http://upload-images.jianshu.io/upload_images/3934058-3be5a1d89490875c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)