Java第三课

xiaoxiao2021-02-28  39

1. 堆与栈

//对象生存空间堆——堆

//方法调用及变量的生存空间——栈;调用某一方法时,该方法会被放在调用栈的栈顶

Duck d =new Duck(24)//对象引用变量d在栈上,对象Duck始终在堆上

//实例变量——声明在类中方法之外的地方——堆上,存在于对象所属的堆空间上

//局部变量——声明在方法或方法的参数上——栈上,随方法消失

//对象引用变量——在初始化对象时——栈上

2. 构造函数

public Duck(){//构造代码}//构造方法没有返回类型,且与类名相同

//在new时会调用构造函数

//构造函数不能被继承

//构造函数可以是公有、私有或不指定

//在创建新对象时,所有继承下来的构造函数都会被执行

//调用父类构造函数的唯一方法是调用super()

3.实例变量赋值初始化相关问题

3.1 一般通过构造函数对实例变量赋值

public Duck(){ size=34; }

3.2 但是无法被使用Duck的程序员来决定大小,因此可以使用setSize()来设定大小

public class Duck{ int size; public Duck(){ System.out.println("Quack"); } public void setSize(int newSize) size =newSize; } } public class UseADuck{ public static void main(string[] args){ Duck d=new Duck(); d.setSize(42); } }

3.3 如果某类对象不应该在状态初始化之前就使用,就别让任何人能够在没有初始化的情况下取得该对象,如果用户构造出Duck对象,但是忘记执行setSize(),因此需要将初始化的程序代码写到构造函数中,同时要设置多个构造函数,以应对不同的情况,如参数类型,或者没有参数等。(注:如果已经写了带参数的构造函数,则必须写一个不带参数的,因为编译器不再执行默认构造参数)——构造函数重载

public class Duck{ int size; public Duck(){ System.out.println("Quack"); size=duckSize; System.out.println("size is"+size); } } public class UseADuck{ public static void main(string[] args){ Duck d=new Duck(42); }

4. 调用父类构造函数

不能直接调用父类的构造函数,要通过super()方法进行调用;

父类的构造函数必须要在子类的构造函数之前结束

super调用必须是构造函数第一个命令

public class Duck extends Animal{ int size; public Duck(){ super();//通过此方法调用,此处不能用Animal() size=dnewSize; } }

5. 有参数的构造函数

通过get方法和super方法获得

public abstract class Animal{ private String name;//每个Animal都有名字 public String getName(){//Hippo会继承这个getten return name; } public Animal(String theName){//有参数的构造函数,用来设定name name=theName; } } public class Hippo extends Animal { public Hippo(String name) {//这个构造函数会要求名字 super(name); //传给animal的构造函数 } } public class MakeHippo{ public static void main(String[] args) { Hippo hippo=new Hippo("Buffy");//创建Hippo,传给名字然后再列出来看看 System.out.println(hippo.getName()); } }

6. 从某个构造函数调用重载版的构造函数

使用this()进行调用

class Mini extends Car{ Color color; public Mini() { this (Color.Red);//无参数的构造函数以默认的颜色调用真正的构造函数 } public Mini(Corlor c) {//真正的构造函数 super("Mini"); color=color; } public Mini(int size) {//有问题,不能同时调用this和super this(Color.Red); super(size); } }

7. 三种方法释放引用

①引用永久性的离开它的范围 void go(){Life z=new Life();}//z在方法结束时消失

②引用被复制到其他对象上 Life  z=new Life();z =new Life();//第一个对象会在z赋值到别处时消失

③直接将引用设定为null。Life  z=new Life();z=null;//第一个对象会在z赋为null时消失

转载请注明原文地址: https://www.6miu.com/read-2622034.html

最新回复(0)