首页 > 编程语言 >Head First Java 读书笔记

Head First Java 读书笔记

时间:2022-11-08 00:11:29浏览次数:37  
标签:Head Java 读书笔记 构造 父类 super public 构造函数

第9章:构造器与垃圾收集器

什么是栈与堆? 堆(heap)、栈(stack)

当Java虚拟机启动时,它会从底层操作系统中取得一块内存,以此区段来执行Java程序。实例变量保存在所属的对象中,位于堆上。如果实例变量是对象引用,则这个引用和对象都是在堆上。

构造函数与对象创建的三个步骤

对象创建的三个步骤:声明、创建、赋值。
构造函数,让你有机会介入 new 的过程。构造函数,没有显示的指定返回值类型,构造函数不会被继承。如果一个类,没有显示地编写构造器函数,Java编译器会默认地为该类添加一个没有参数的构造器函数。反之,Java编译器则不会再添加任何默认的构造函数。

Dog dog = new Dog();

什么构造器函数重载?

即一个类,有多个构造器函数,且它们的参数都不能相同,包括参数顺序不同、或者参数类型不同、或者参数个数不同。重载的构造器,代表了该类在创建对象时可以有多种不同的方式。

public class Mushroom {
// 以下五个构造器,都是合法的,即构造器重载
public Mushroom() {}
public Mushroom( int size ) {}
public Mushroom( boolean isMagic ) {}
public Mushroom( boolean isMagic, int size ) {}
public Mushroom( int size, boolean isMagic ) {}
}

什么是构造函数链? super()

构造函数在执行的时候,第一件事就是去执行它的父类的构造函数。这样的链式过程,就被称为“构造函数链(Constructor Chaining)”。

class Animal {
public Animal() {
System.out.println("Making an Animal");
}
}

class Dog extends Animal {
public Dog() {
super(); // 如果没有这句,Java编译器会默认添加上这句,即调用父类的无参构造器
System.out.println("Making an Dog");
}
}

public class ChainTest {
public static void main(String[] args) {
System.out.println("Starting...");
Dog d = new Dog();
}
}

如果一个类,没有显示地书写构造器函数,Java编译器会为它添加上默认的无参构造器。如果在一个子类的构造器中没有使用super()调用父类的某个重载构造构造器,Java编译器会为这个子类的构造器默认添加上super(),即在子类的构造器函数中调用父类的无参构造器。
父类的构造器函数,必须在子类的构造器函数之前调用。在子类构造器函数中调用父类构造器时,必须与父类构造器的参数列表一致。

在类中,this 和 super 有什么区别? this() 和 super() 有什么区别?

使用 this() 可以在某个构造函数中调用同一个类的另外一个构造函数。 this() 只能在构造函数中使用,并且必须是第一行。 this() 和 super() 不能同时使用。

class Car {
private String name;
// 父类的有参构造器
public Car(String name) {
this.name = name;
System.out.println(name);
}
}

class MiniCar extends Car {
// 构造器
public MiniCar(String name) {
// 调用父类的有参构造器
super(name);
}
// 另一个构造器
public MiniCar() {
// 调用同一个类的另一个构造器
this("这里子类汽车的名称");
}
}

public class TestThis {
public static void main(String[] args) {
MiniCar mc1 = new MiniCar();
MiniCar mc2 = new MiniCar("动态的名字");
}
}

对象、变量的生命周期是怎样的?

对象的生命周期决定于对象引用变量的生命周期,如果引用还在,则对象也在;如果引用死了,对象会跟着被 GC 回收。当最后一个引用消失时,对象就会变成可回收的。
局部变量,只存活在对象的方法中,方法结束,局部变量就死了。
实例变量,存活在对象中,它的生命周期与对象一致。

Life 和 Scope 有什么区别?

Life,只要变量的推栈块还存在于堆栈上,局部变量就算是活着。局部变量会活到方法执行完毕为止。
Scope,局部变量的作用范围只限于它所在的方法中。当该方法调用别的方法时,该局部变量还活着,但不在目前的范围内,当被调用的其它方法执行完毕后,该总局变量的范围又跟着回来了。

什么是 null ?

当你把引用变量赋值为 null 时,你就等于抹除了遥控器的功能。对 null 对象使用圆点调用方法,会报空指针异常 NullPointerException。

 

标签:Head,Java,读书笔记,构造,父类,super,public,构造函数
From: https://www.cnblogs.com/LvJinshuai/p/16867959.html

相关文章

  • java——变量
                            ======================================================================================......
  • idea Java:非法字符:'\ufeff' 的解决
    1、用idea运行项目的时候会遇到:ideaJava:非法字符:'\ufeff'的解决2、为什么会产生这个错误?用notepad++打开这个报错的文件,点击ecoding,我们可以看到这是一个utf-8-bom编......
  • java 多线程买票案例
    packagecom.tedu.threadStudy;publicclassstudyTicket{publicstaticvoidmain(String[]args){YouThreadyouThread=newYouThread();T......
  • Java——基本数据类型
                    注意: 整型(int)常量默认在内存中占32位,是具有整数类型的值,当运算过程中所需值超过32位长度时,可以把它表示为长整......
  • Java的推箱子游戏
    Java的推箱子游戏一、用途1、能满足学习和二次开发,比如实训实验2、可以作为熟悉Java的学习,作为老师阶段性学习的一个成功检验,不再是单调的理解老师空泛的知识,导入就能运行......
  • 【Java复健指南10】OOP高级01-类变量、类方法和main
    类变量什么是类变量类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改......
  • java基础2
    类型转换Java运算时,需要用到类型转换运算中不同类型数据先转化为同一类型,然后进行运算两种转换方式强制转换自动转换publicclassDemo05{publics......
  • 从新开始学JAVA - 运算符9
    运算符运算符类型算术运算符:+,-,*,/,%,++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=,instanceof逻辑运算符:&&,||,!位运算符:&,|,^......
  • java线程 Thread
    packagecom.tedu.threadStudy;publicclassstudyThread{publicstaticvoidmain(String[]args){MyThreadth1=newMyThread("线程1");My......
  • 《Java程序设计——深入理解计算机系统的语言》上市了
    ​​​​本书是一部系统论述Java编程语言的体化教程(含纸质图书、教学课件、源代码与答疑服务)。书中主要内容包括:引言;开发环境搭建;第一个Java程序; Java语法基础;数据类型;运算......