Java的三种变量
静态变量,属于一个类,生命周期由该类来决定,用的时候最好用类名.静态变量名来用,而不是用实例对象.静态变量名来使用它
成员变量,属于一个对象,生命周期由该对象来决定
局部变量,定义在方法中的局部变量,属于一个方法,生命周期由该方法来决定;定义在一个代码块,比如if,for语句或者直接用{}括起来,但是代码块中的变量不得与代码块外的变量重复
Java的两种数据类型
Java的数据类型分为基本类型和引用类型,基本类型包含八种:short,char,int,float,double,byte,boolean,long,这八种变量是放在栈区的,而引用类型是指向一个对象的引用,引用类型变量指向的对象是放在堆里的,而引用类型变量也是放在栈区的
另外引用数据类型存放的是数据所在的地址,而基本数据类型存放的是数据的值
Java基本数据类型的包装类
基本数据类型的包装类是对象,就不是基本类型了,对象会放在堆里
将基本数据类型转换成包装类很简单,就是new Integer(5)就可以了,或者Integer.valueof(5)也可以,而将包装类转换成基本数据类型也很简单,就是integer.intValue()方法即可
另外说一句,Java5.0之后有自动装箱和拆箱,就不必这么显式的转换了
equal和==的区别
==是一个运算符,运用在基本数据类型时是比较其值是否相等,但用在引用类型时是比较其地址是否相等
而equal是一个方法,继承自Object,如果不覆盖,跟==是一样的,但可以被覆盖,根据特定的方式判断两个对象是否相等
Java中的静态成员
Java中的静态成员概括起来有三种,分别是静态成员变量,静态方法和静态代码块
其中静态成员变量和静态方法都已经很熟悉了,静态代码块有个重要的性质就是可以访问静态成员变量和静态代码块
Java中为父类传递参数
举个例子,父类没有无参的构造方法,只有一个有参的构造方法如下
Class Father{
int a;
Father(int a){
this.a=a;
}
}
Class Son extends Father{
Son(){
super(20);
}
son(int a){
super(a);
}
}
Java中的内部类
内部类可以分为两大类,成员式内部类和局部式内部类,而成员式内部类又可以分为静态成员内部类和普通成员内部类,局部式内部类又可以分为匿名内部类和普通局部式内部类,接下来我们分别看看这四类各自是什么样的
成员内部类
静态成员内部类
class Outter{
Static class Inner{
}
}
外部类加载的时候,内部类也同时加载,完整的类名是Outter.Inner,编译之后的class文件是Outter$Inner.class
静态内部类无法访问外部类的非静态方法
其实实际上静态类就是一个独立的类,不管它是在内部还是外部,在内部只是缩小了命名空间而已,但它还是一个独立的类,其实JVM都无法判断它们的包含关系
普通成员内部类
class Outter{
class Inner{
}
}
成员内部类的使用方法
Outter outter=new Outter();
Outter.Inner inner=outter.new Inner();
对于成员内部类的构造函数来说,系统会为它们自动加上一个外部类的参数以及一个外部类的成员变量,这是为了遵循先有外部类实例再有内部类实例的原则
class Inner(Outter outter){
this.outter=outter;
}
局部内部类
局部内部类在定义它的方法中
普通局部内部类
public void myMethod(){
class MyLocal(){
}
}
局部内部类不能使用static,只能用final和abstract,仅可以访问外部类中带有final关键字的局部变量以及外部类对象的任何成员变量
匿名内部类
在普通局部内部类的基础上稍微有点不同,那就是内部类没有名字
public void myMethod(){
new MyLocalInterface(){ //直接new一个接口
public void interMethod(){//实现接口中的方法
}
};//注意这里的分号
}
匿名内部类编译后的命名是根据顺序来的,比如高Outter$1.class
总结
静态内部类相当于类的一个静态成员一样,是一个使用static修饰的内部类,隶属于外部类,但使用起来相当于一个独立的类
成员内部类相当于类的一个普通成员一样,隶属于外部类的具体对象,需要先创建外部对象,然后再由外部对象实例创建成员内部类对象实例
局部内部类定义在方法体中,只能访问用final修饰的局部变量以及外部类的成员变量
匿名内部类也是定义在方法体中,没有名字而已,使用灵活
访问控制符
public是类内部,包内的类,子类,外部包都能访问
protected是类内部,包内部,子类能访问,这个主要是为子类继承而设计的
default也是friendly,是对包内设计的,所以是类内部,包内部可以访问
private是只能类内部访问
基本数据类型boolean和其包装类有什么区别
首先boolean是基本数据类型,Boolean是一个类,这是最本质的区别,对于boolean来说,它只有false和true两个值,而对于Boolean来说,它除了这两个值之外还有一个null值