java概念(稍难)理解汇总(1)
-
java程序从编写到实现
源代码(hello.java.)->编辑器(javac hello.java)->生成hello.class文件(有字节码组成)->java虚拟机运行class文件(JYM) -
primitive(原始的)数据:java本身具有的数据类型:比如 int long boolen等
-
dog d=new dog (),d是对象的一个引用,head first java中用“遥控器”来类比,学过C语言的话,可以用指针来类比。
-
引用数组
employee[] staff=new employee[3];注意这里的staff只是一个引用数组的首地址,而这个数组有三个元素,每个元素都是对应一个对象的引用,而不是三个对象。
staff[0]=new employee();
staff[0].employ’s method; -
重载与覆盖
重载:
①指函数不同的参数表(参数的类型、个数、顺序),对同名函数的名称做修饰。在同一可访问区域内被声明的几个具有不同参数列表的同名函数,程序会根据不同的参数列来确定具体调用哪个函数,
②注意,重载不关心函数的返回类型
③对于重载函数的调用,在编译期间就已经调用,是静态的,他们的地址在编译期间就绑定了与多态无关。
覆盖:
①覆盖是指子类中存在重新定义父类的函数,其参数名、参数列、返回值类型必须同父类中的相应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不②同当子类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,它和多态真正相关。
③这样函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出),因此,这样的函数实在运行期间绑定的。 -
多态:当不同对象去完成同一件事时,会产生不同结果
①实现抽象方法就如图覆盖过的方法一样,一个抽象类中的一个抽象方法通过不同的子类覆盖,从而实现方法的多态 -
instanceof
①左边是对象,右边是类,返回类型是Boolean类型。它的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象,是,则返回true,否则返回false。
②左边的对象必须是右边的类必须是同一个继承树下的继承或者分支,否则编译器会报错。比如 employee a=new employee();
if(a instanceof String) -
接口 interface
①产生原因:一个继承树有部分子类想要实现与其他分支不同的方法,但java不接受多重继承
②接口就是100%的抽象的方法,而且一个子类可以实现多个接口,然后自己覆盖接口中抽象的方法
③public class dog extends animal implements pet{
} -
实例变量局部变量:实例变量就是我们定义类的时候方法外定义的变量它跟整个对象一起存储在堆中,局部变量就是类中的方法中新定义的变量,它存储在栈中;
-
对象的引用是放在栈中,对象是放在堆中
-
构造函数(构造器):你在初始化对象的时候就会执行的程序代码,对一些实例变量进行赋值,如果你没有写,编译器会帮你写
①特点 与类同名,但是没有返回类型
public class dog {
int size;
public dog (int asize){
size=asize;
}
②可以有多个构造器(重载),比如没有参数的构造器,对变量进行赋初值,保证使用的时候不会出错。
③父类子类构造器:创建新对象时,继承下来的构造函数都会执行
所以在写子类的构造函数时必须调用父类的构造函数,通过super(父类函数的参数);+其他构造代码,然后一直调用父类构造器直到object -
重载构造函数:你有参数不同的构造器,至于调用哪一个,取决与new对象时输入的参数
-
this 和super辨析:
1.属性的区别:
(1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。
(2)super访问父类中的属性。
2.方法的区别:
(1)this访问本类中的方法,如果本类没有这个方法则访问父类中的方法。
(2)super访问父类中的方法。
3.构造的区别:
(1)this调用本类构造构造,必须放在构造方法的首行。
(2)super调用父类构造,必须放在子类构造方法首行。
(3)其他区别:this表示当前对象。super不能表示当前对象二、this. 变量和super.变量 (1)this.变量:调用的当前对象的变量; (2)super.变量:直接调用的是父类中的变量。 三、this(参数)和super(参数)方法 (1)this(参数):调用(转发)的是当前类中的构造器; (2)super(参数):用于确认要使用父类中的哪一个构造器。
四、注意点:
(1)在对拥有父类的子类进行初始化时,父类的构造方法也会执行,且优先于子类的构造函数执行;因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super();
(2)this() 和super()都只能写在构造函数的第一行;
(3)this() 和super() 不能存在于同一个构造函数中。
1)this()和super()都必须写在构造函数的第一行;
2)this()语句调用的是当前类的另一个构造函数而这个另一个构造函数中必然有一个父类的构造器,再使用super()又调用一次父类的构造器, 就相当于调用了两次父类的构造器,编译器不会通过;
(4)this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。
- 静态static和final:
①静态方法:
不能用该类实例的方法:因为静态方法的时通过类名称来调用,所以静态方法无法引用到该类的实例变量
不能用该类调用非静态的方法:
②静态变量:和C语言函数中定义static变量可以类比,它的值对所有实例来说都相同
**注意:**静态方法和静态变量都是类在加载中就实现,实例方法变量得new对象之后才实现
③fina变量代表你不能改变它得值
final的方法代表你不能覆盖掉method
final的类代表你不能继承该类