think in java第五章 初始化与清理 总结随笔

xiaoxiao2021-02-28  92

正如章节名本章主要讲解的是java的初始化和清理的知识。下面就是我对本章的总结。

用构造器确保初始化

在这一小节中最少需要理解的有两个方面:

        1) 构造器是如何确保在创建对象时使之得到初始化。java是一门采用了构造器的语言(就我了解过的面向对象语言都采用了构造器这种初始化机制),在对象创建时,如果其类具有构造器,java就会在用户有能力操作对象之前自动的调用相应的构造器,从而保证初始化的进行。

        2) 如何使用构造器进行对象初始化。我们知道调用构造器是编译器完成的,为了让编译器明白去调用哪个方法,java中规定构造器的名称和类名称相同。构造器可以分为无参构造器(默认构造器)和有参构造器。

带有构造器(无参)的简单类:

public class SimpleConstructor { public static void main(String[] args) { new Dog(); } } class Dog { Dog(){ //this is the constructor System.out.println("旺财"); } }

带有构造器(有参)的简单类:

public class SimpleConstructor { public static void main(String[] args) { new Dog("旺财"); } } class Dog { Dog(String str) { System.out.println(str); } }

方法重载

方法重载概述: 在同一个类中,允许存在超过一个的同名的方法,前提是它们各自的参数个数或者参数类型不同即可。

方法重载特点: 与返回值类型无关,只看方法名和参数列表。

用例:重载的构造器和重载的方法

public class SimpleConstructor { public static void main(String[] args) { Dog d =new Dog("旺财"); d.info(); d.info("旺财"); } } class Dog { String name; Dog() { //无参 System.out.println("汪汪"); } Dog(String str) { //有参 name = str; System.out.println(str); } void info() { System.out.println("这是一只狗"); } void info(String str) { name = str; System.out.println(str + "是一只狗" ); } }

用例:重载的构造器和重载的方法

public class SimpleConstructor { public static void main(String[] args) { Dog d =new Dog("旺财"); d.info(); d.info("旺财"); } } class Dog { String name; Dog() { //无参 System.out.println("汪汪"); } Dog(String str) { //有參 name = str; System.out.println(str); } void info() { System.out.println("这是一只狗"); } void info(String str) { name = str; System.out.println(str + "是一只狗" ); } }

默认构造器和this关键字

当你写的类中没有构造器,编译器会帮你自动创建一个默认的构造器。

关于this的总结:Java中的this与面向对象的程序设计密切相关,它表示当前对象。

this关键字详解:

     抛出问题:  如果有两个相同类型的对象a和b去调用同一个方法info(),如果只有一个info()方法,它如何才能知道被哪个对象所调用呢?

public class SimpleConstructor { public static void main(String[] args) { Dog a = new Dog(); Dog b = new Dog(); a.info(); b.info(); }} 重点:编译器会将操作对象的引用作为第一个参数传递给info()。 Dog.info(a); Dog.info(b);

因为上述对象的引用传递是编译器传入的,没有标识符可用,所以选用this这个关键字表示调用方法的那个对象。 清理:终结处理和回收垃圾 针对java的终结处理和回收垃圾自己现在也是一知半解,很难将所知道的总结成语言,下面是一篇专门介绍java的终结处理和垃圾回收的博客。我觉得写的很不错 地址:http://blog.csdn.net/xiaotian15/article/details/8246309

成员初始化

java尽力保证:所有变量在使用前都能得到恰当的初始化。 每一个基本类型数据成员保证都会有一个初始值;引用数据类型在未得到初始化时,该引用就会得到一个特殊值null; 构造器初始化 使用构造器来进行数据初始化,它将在构造器被调用之前发生。

public class Constructor { int i; public Constructor() { i = 1; } } 在类的内部,初始化的顺序取决于变量定义的先后顺序。即使变量定义在方法定义之间,它们仍然会在任何方法被调用之前得到初始化。

public class SimpleConstructor { public static void main(String[] args) { BigDog bg = new BigDog(); } } class Dog { public Dog(int i) { System.out.println(i); } } class BigDog { Dog d1 = new Dog(1); BigDog() { d3 = new Dog(4); } Dog d2 = new Dog(2); Dog d3 = new Dog(3); } 结果:1234 static数据的初始化:无论创建多少个对象,静态数据永远只占用一份存储空间。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且没有对它进行初始化,那么它就会获得基本类型的标准初值,而如果它是一个对象的引用,则默认初始值为null。 了解静态存储区域何时初始化:

public class StaticInitialization { public static void main(String args[]) { System.out.println("Creating new Cupboard() in main"); new Cupboard(); System.out.println("Creating new Cupboard() in main"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table=new Table(); static Cupboard cupboard=new Cupboard(); } class Bowl{ Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){ System.out.println("f1("+marker+")"); } } class Table{ static Bowl bowl1=new Bowl(1); Table(){ System.out.println("Table()"); bowl2.f1(1); } void f2(int marker){ System.out.println("f2("+marker+")"); } static Bowl bowl2=new Bowl(2); } class Cupboard{ Bowl bowl3=new Bowl(3); static Bowl bowl4=new Bowl(4); Cupboard(){ System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker){ System.out.println("f3("+marker+")"); } static Bowl bowl5=new Bowl(5); } 答案: Bowl(1) Bowl(2) Table() f1(1) Bowl(4) Bowl(5) Bowl(3) Cupboard() f1(2) Creating new Cupboard() in main Bowl(3) Cupboard() f1(2) Creating new Cupboard() in main Bowl(3) Cupboard() f1(2) f2(1) f3(1)

数组初始化

数组的三种初始化方式:

public class TestArray { public static void main(String[] args) { //定义 int[] a; int[] b; //创建数组对象 a = new int[3]; b = new int[4]; /* * 1.默认初始化 * 数组元素相当于对象的成员变量,默认值跟成员变量的规则一样。数字0,布尔false,char\u0000,引用:null; */ /* * 2.动态初始化 */ for(int i=0;i<a.length;i++) { a[i] = i*2; } /* * 3.静态初始化 */ int c[] = {1,2,3,4}; } }

枚举类型

它是一种新的类型(其实也可以看作类),允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。

总结

我觉得本章的重点是要理解好构造器,这种初始化机制;还有就是java的垃圾回收机制的理解。

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

最新回复(0)