JAVA学习笔记
Day 01
final 关键字
如果final修饰类中的某一个属性,那么这个属性只能通过构造函数确定值,在确定值以后不能被更改
如果final修饰类的变量,那么这个类的变量只能指向一个对象,对象中的属性可以被更改,但是这个实例不能再指向其他对象
final修饰类,这个类不能被继承
final修饰方法,这个方法在继承后不能被重载
static关键字
如果类中有一个属性利用static修饰,那么这个类的所有对象共享这个属性
也即在一个对象中对这个属性更改,会影响其他的对象
static修饰类中的方法,那么这个方法也可以直接利用类名来访问
例如
math.pow(x,a)
利用静态方法可以访问类中的静态属性,但是不能利用静态方法访问非静态属性
非静态方法也可以方法静态属性
区别在于是否需要创建对象
static final关键字
用static final 修饰的属性,首先不可被更改,其次会被多个对象共享。
可以直接用类名来访问这个属性,而不用创建新的对象。
工厂方法
后续补充
函数传值与引用
如果一个方法的参数是类似于int类型这样的数据,那么这个参数只是形参,并不会对原来的数据产生任何的影响
但如果参数为一个对象,那么这样的传参方式就是引用,方法会引用原来的对象,对原来的对象会有直接的影响
注意这里的引用和C++中的引用不同
这里引用是指向的意思
JAVA new一个对象是会新开辟一个空间来保持这个对象
赋值=实际上就是指向这个对象
例如:
swap(Emploee x,Emploee y){
Emploee t =x;
x=y;
y=t;
}
并不会发生交换
这个函数的运行过程是这样的:
首先会创建两个临时变量x,y来指向已有的Emploee对象
然后在函数结束时,x,y会销毁,原来的Emploee对象并不会发生交换
方法重载
和C++一样,JAVA支持函数重载
对于构造函数而言
如果不提供显式的构造函数
系统会提供一个默认的构造函数
对于每一个属性赋予默认值
同时可以在构造器里调用另一个构造函数
也可以通过初始化块来对属性进行初始化
静态导入
如果在导入类时利用static修饰,那么对于类的静态方法可以直接调用,而不需要类名或者创建对象
Day 02
继承
extends关键字
子类不能直接访问超类的私有域,需要调用超类的接口来访问
也即
super.getxxx();
如果不用super关键字
那么就不不停地调用自身,类似于递归。
子类构造器
由于子类不能访问超类的私有域,所以在子类中无法对父类的私有域进行初始化。
有两种方法。
一种是调用每个私有域的初始化函数。
第二种就是在子类的构造器中调用超类的构造器
this和super关键字
多态
一个超类的变量,可以指向超类对象,也可以指向子类对象。
但是不能访问没有在超类中声明的变量和方法
反过来一个子类的变量,不可以指向超类对象。
抽象abstract
利用abstract修饰的方法,在继承时可以不用实现
如果一个类中有抽象方法,那么这个类一定要用abstract修饰
抽象类不能被实例化,但可以定义一个抽象类的对象变量,只能非抽象子类对象
编译器只允许调用在类中声明的方法。
如果一个抽象类的对象指向了非抽象子类对象,但如果要调用在抽象类中没有声明的方法,程序会报错
ArrayList泛型类数组
ArrayList<xx> name = new ArrayList<xx>();
在JAVA 7中可以简化
ArrayList<xx> name = new ArrayList();
接口
关键字:
interface implements
接口不是类,所以不能创建对象
却能定义相关的变量来引用实现了接口的类
类似于超类的变量可以引用子类的对象
··