知识点摘要-20141229002

来源:互联网 发布:算法设计与分析王红梅 编辑:程序博客网 时间:2024/06/02 00:28

方法定义规则:

方法名+参数列表;

 

方法重载:

方法名一样,参数列表不一样,与返回值无关;

参数列表:参数类型、参数个数;

 

Public int add(int a,int b){}

Public int add(long a ,int b){}

 

方法调用就近原则:

         Add(‘a’,2)调用的是 add(int a,int b )

Char 类型转 int 类型较近

调用时将 char 类型转化为 int 类型。

 

Java 方法的重载体现行为的多态性;

System.out.println();

Char数组输出的是字符串;

Int数组输出的是地址;

 

Java中方法参数的传递规则:

基于值的传递:就是变量值的赋值;

基本类型就是值的复制;

引用类型是物理地址值的复制;

 

 

基本类型值传递:

栈内存中,创建实参和形参,实参将值复制给形参,方法体中形参值改变,对应栈内存中形参的值也相应改变,方法结束形参销毁,实参不变。

 

 

 

Koo koo = new Koo();

首先调用无参构造器,在对内存中创建对象;

其次将内存中对象的物理地址值赋值给引用变量 koo,并在栈内存中创建引用变量;

 

Add (Koo koo);

将引用变量的值赋值给形参 koo ,在栈内存中创建临时变量 koo;

 

Public int add(Koo koo){

         Kook = koo;

         k.a++;

         returnkoo.a;

}

方法体内,形参将物理地址值赋值给局部局部引用变量 k,在栈内存中创建局部变量 k

局部变量k指向堆内存中Koo对象

 

调用方法结束后临时变量 k,koo 销毁

 

 

最终:栈内存中只存在基本变量 a,引用变量koo

堆内存中存在 Koo对象;

 

 

 

 

继承:

1、  子类继承父类的所有属性和方法;

2、  构造器不能继承;

3、  实例子类会递归分配所有父类的空间;

4、  子类构造器一定调用父类构造器;

5、  类一定有构造器;

 

多态:父类型引用子类型,编译期不确定是什么类型,同意都是父类型,运行期间才确定类型,通过“对象的动态绑定”实现多态现象。

 

Java 引用变量两种类型:编译时类型和运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由运行时,实际赋给改变量的对象决定,如果编译时类型和运行时类型不一致就会出现多态;

 

子类继承父类的属性和方法,同时可以增加自己的属性和方法,重写父类的方法。

 

 

堆内存中,先根据对象的属性类型分配空间创建对象,如果对象的属性是一个对象,则对象的属性对应的是属性对象的物理地址值。

 

继承中的构造器:

子类构造器一定调用父类构造器;

子类构造器默认调用父类的无参构造器;

Super()表示调用父类的构造器;

子类构造器调用父类构造器,一定是放在第一行;

This()必须写在子类构造器的第一行;

有this()就不能有super();

 

        

 

父类定义了有参构造器了,未定义无参构造器,子类默认调用父类的无参构造器,则子类构造器必须显示调用父类的有参构造器。

 

如果父类没有无参构造器,就必须在子类中明确指定调用父类的有参构造器。

编程建议:所有类都提供无参构造器,减少继承时候的麻烦(显式调用父类的有参构造器)。

 

 

对象实例化过程:

1、  在创建类之前,检查类是否加载(将硬盘中的.class文件加载都内存中),如果没有加载就加载这个类,在这个类加载之前要加载这个类的所有父类。

Java运行时采用的策略:懒惰式加载(按需加载):如果第一次用到,只加载一次,通过classpath指定的路径寻找.class文件,加载以后是一个对象,类型是class

2、  在内存中分配对象空间,递归分配所有父类和=子类的属性空间,属性默认初始化,初始化为“0”值。

3、  进行属性的赋值。

4、  调用本类的构造器,调用本类的构造器默认调用父类的无参构造器。

 

图示及说明如下:

 第1步: 检查并加载类 首先检查内存中Koo有没有加载,如果Koo没有加载会加载Koo并加载父类Foo

第2步:在内存堆中分配对象空间先递归的分配父类型空间(Foo):int a=0(int类型空间,默认值为0)再分配子类型空间(Koo):int b = 0

 

 

 

 

 

第3步:进行属性的赋值。

 

 

 

第4步:递归调用父类构造器。

 

 

 

第5步:调用本类构造器

 

 

 

 


 

java中的访问控制符,是修饰Java中类、属性、方法的访问可见范围的。请记住如下表格

 

 

public修饰的,在任何地方都能访问

protected修饰的,在类内部、同一个包、子类中能访问

[default]修饰的,在类内部和同一个包中可以访问(不建议用)

private修饰的,仅限当前类内部访问

 

 

private修饰的属性,仅限本类内部访问

类、属性、方法都可用 public、protected、dufault、private修饰;

声明属性和方法尽量私有,这样才能做到尽可能的封装;

一个源文件可以有多个类,但是只能有一个public类,文件名要和public类的名字一致,如果是其他类只能是默认的default修饰。

不建议使用非公开类,所有类都应该是共有的,并且一个源文件一个类。

 

Java中继承的语法现象,父类变量可以引用子类的实例,实现多态,编译时类型与运行时类型的不一致;

引用类型变量的自动转换,小类型到大类型是自动转换的;

子类可以覆盖父类的方法,修改父类的行为;

方法的覆盖是由方法动态绑定实现的,是java虚拟机运行时确定执行那个对象,那个方法,java最终执行子类的方法,如调用父类的方法,运行时实际调用的是子类覆盖父类的方法。


 

 

引用类型转换 ***

 向下转型(隐式/自动类型转换),是小类型到大类型的转换

 向上造型(强制类型转换),是大类型到小类型

 instanceof 运算符,用来检查引用对象的类型

 

经常与“引用类型强制转换”配合,实现安全的类型转换,避免类型转换异常

 

0 0