Java第三课_堆栈

1. 堆与栈

 

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

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

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

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

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

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

2. 构造函数

 

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

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

 

//构造函数不能被继承

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

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

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

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

 

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


 
  1. public Duck(){

  2. size=34;

  3. }

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


 
  1. public class Duck{

  2. int size;

  3. public Duck(){

  4. System.out.println("Quack");

  5. }

  6. public void setSize(int newSize)

  7. size =newSize;

  8. }

  9. }

  10.  
  11. public class UseADuck{

  12. public static void main(string[] args){

  13. Duck d=new Duck();

  14. d.setSize(42);

  15. }

  16. }

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


 
  1. public class Duck{

  2. int size;

  3. public Duck(){

  4. System.out.println("Quack");

  5. size=duckSize;

  6. System.out.println("size is"+size);

  7. }

  8. }

  9.  
  10. public class UseADuck{

  11. public static void main(string[] args){

  12. Duck d=new Duck(42);

  13. }

4. 调用父类构造函数

 

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

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

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

 

 


 
  1. public class Duck extends Animal{

  2. int size;

  3. public Duck(){

  4. super();//通过此方法调用,此处不能用Animal()

  5. size=dnewSize;

  6. }

  7. }

 

5. 有参数的构造函数

 

通过get方法和super方法获得


 
  1. public abstract class Animal{

  2. private String name;//每个Animal都有名字

  3. public String getName(){//Hippo会继承这个getten

  4. return name;

  5. }

  6. public Animal(String theName){//有参数的构造函数,用来设定name

  7. name=theName;

  8. }

  9. }

  10. public class Hippo extends Animal {

  11. public Hippo(String name) {//这个构造函数会要求名字

  12. super(name); //传给animal的构造函数

  13. }

  14. }

  15. public class MakeHippo{

  16. public static void main(String[] args) {

  17. Hippo hippo=new Hippo("Buffy");//创建Hippo,传给名字然后再列出来看看

  18. System.out.println(hippo.getName());

  19. }

  20. }

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

 

 

使用this()进行调用


 
  1. class Mini extends Car{

  2. Color color;

  3. public Mini() {

  4. this (Color.Red);//无参数的构造函数以默认的颜色调用真正的构造函数

  5. }

  6. public Mini(Corlor c) {//真正的构造函数

  7. super("Mini");

  8. color=color;

  9. }

  10. public Mini(int size) {//有问题,不能同时调用this和super

  11. this(Color.Red);

  12. super(size);

  13. }

  14. }

 

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时消失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值