《Java编程思想》笔记 第五章 初始化与清理

1.构造器

  • 因为创建一个类的对象构造器就会自动执行,故初始化某些东西特好

2.方法重载

  • 方法名相同,参数列表不同。

2.1 区分重载方法

  • 方法重载后区别不同方法的就是方法签名 -->参数类型和个数(参数顺序不同也能区分但一般不考虑顺序)

2.2 涉及基本数据类型的重载

  • 范围由小到大:byte > short > char > int > long > float > double
  • 自动提升: 传入类型小于声明类型,传入值提升至与其最近的类型,该类型参数的方法被调用
  • 传入类型大于声明,只有将传入类型强制转换才能传入

3.构造器及其重载

  • 不显示写出默认无参构造器则编译器会默认添加一个默认无参构造器,一但写出任何构造器则不会添加默认无参构造器。
  • 重载构造器跟重载方法一样(重载了构造器则默认构造器不存在了,要使用默认构造器就要手动写出来),在创建对象时在构造器中方法签名区分

4.this作用

4.1 this只能用在方法中,表示调用所在方法的对象。

4.1 构造器中调用重载构造器,只能是在构造器的第一句,且只能调用一个构造器,且只有构造器可以调用构造器。

4.2 this(参数) 根据参数不同调用不同构造器

4.3 代表数据成员 this.s。 s不是参数也不是局部变量

4.4 调用其他方法 this.fun()

4.5 作为返回值 return this ,返回的是调用此方法的对象

5.关于static

5.1 static方法就是没有this的方法

5.2 static方法不能直接调用非静态方法,非静态方法可以调用静态方法。

  • 直接是说不能在静态方法中不通过对象调用非静态方法。如 static void f(){ g();}  f()和g()属于同一个类中

5.2. 调用一个非静态方法必须要使用对象引用调用 对象引用.f();

5.3 static方法不需要对象就可直接调用, 类. static方法名

6.清理:终结处理和垃圾回收

6.1 垃圾回收器只回收经new分配的内存

6.2 对象可能不被回收

6.3 垃圾回收不等于构析

6.4 垃圾回收只与内存有关,只要内存用不完对象就不会被回收,因为垃圾回收器也是要消耗内存的。

6.5 finalize() 方法

  • 在垃圾回收器准备释放对象内存时,先会调用finalize()方法。每个类都默认有一个finalize()方法,此方法可以用来进行对对象终结条件的验证。

7.初始化顺序

1.将对象内存空间初始化为二进制0(所有的数据成员被设为默认值)

2.如果该类有基类则初始化其基类

3. 静态成员和静态域(谁在前谁先初始化,且在内存中只占一份空间,同一个类不同对象可以共享)

4.main方法

5.非静态成员变量,引用,实例初始化  被初始化

6. 构造器

注意

初始化顺序中的1,2,3,4,为类加载过程,5,6为创建对象过程,只有创建了对象才会执行。。

8.数组初始化

8.1 定义数组  int[ ] a1; 数组保存同一类型的数据

8.2初始化: int[ ] a1 = { 1, 2, 3 ,4 };

Integer[ ] a1 = { new Integer(2),  3,  4}; //自动包装机制

Integer[ ] a1 = new Integer[ ] { 2, 3, 4 }

8.3 int[ ] a2;  a2 = a1; 引用复制,指向同一数组

8.4 int[ ] a3 = new int[5]; 只定义了数组大小(索引 0-4),其中数据并未赋值,默认初始化为0,null,false .

8.5 a3.length()  返回数组元素个数5

8.6 Arrays.toString() 可打印一维数组

int[] a = new int[5];
        a[1] = 5;
        System.out.println(Arrays.toString(a)); //[0, 5, 0, 0, 0]

9.可变参数列表

  • 对于传入方法的参数类型或者参数个数未知情况

SE5 之前

public class Arrayss {

    public static void main(String[] args) {
        // 使用最大的基类Object创建数组这样才能传入不同类型的参数
        f(new Object[] { new Integer(20), new Double(8.0), "java" });
    }

    static void f(Object[] s) {};

}

SE5

public class Arrayss {

    public static void main(String[] args) {
        // 不必编写数组,但是编译器实际上会创建数组,且不会使用自动包装机制
        f(new Integer(20), new Double(8.0), "java");
        g(new Integer(6), 9); // 可变参数列表可与自动包装机制共存
        h(new Double(8.1), 9.2); // 自动包装机制
        g1(9); // 自动包装机制
    }

    static void f(Object... s) {
        System.out.println(s.getClass());
    };

    static void g(int... s) {
        System.out.println(s.getClass());
    };

    static void h(Double... s) {
        System.out.println(s.getClass());
    };

    static void g1(Integer... s) {
        System.out.println(s.getClass());
    };

}

输出:

class [Ljava.lang.Object;
class [I
class [Ljava.lang.Double;
class [Ljava.lang.Integer;

10.枚举

public enum EnumName {  NOT, MILD, MEDIUM, HOT  }

使用enum 需要创建一个该类型引用,并赋值给某个实例

EnunName howHot = EnunName.HOT;

原文地址:https://www.cnblogs.com/mibloom/p/9040362.html

时间: 2024-11-10 07:54:04

《Java编程思想》笔记 第五章 初始化与清理的相关文章

java 编程思想笔记(二)——初始化

一.问题 随着计算机革命的发展,"不安全"的编程方式已逐渐成为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 二.java 解决方案 构造器:一种特殊的方法.java 中"初始化"和"创建"捆绑在一起,两者不能分离. 垃圾回收器:释放无用的对象. 三.方法重载 为什么要在这里讲方法重载?我觉得首先:构造器是一种特殊的方法,再一个,构造器除了默认构造器还有有参构造器.为了让方法名称相同而形式参数不同的构造器同时存在,就必须用到方法重

Thinking in JAVA笔记——第五章 初始化与清理

5.1用构造器确保初始化 为了确保安全性,强制在使用前进行初始化 Java构造器与类名相同,无参数构造器有叫做默认构造器. 5.2 方法重载 method overloading:重载,同名不同参 method overriding:重写/覆盖,子类覆盖父类 5.2.1区分重载方法 独一无二的参数类型表,否则编译不通过! 5.2.2涉及基本类型的重载 如果参数类型是int,short,byte,long等,自动定位到int而不会执行short,byte 因为默认常数就是int型,如果没有int,

Java编程思想---第五章 初始化与清理(下)

第五章 初始化与清理(下) 5.7 构造器初始化 可以使用构造器来进行初始化,在运行时可以调用方法或执行某些动作来确定初值,但是我们无法阻止自动初始化的进行,它将在构造器被调用之前发生.例如: public class Counter { int i; Counter() { i = 7; } } 那么i首先被置为0,然后变成7.编译器不会强制你一定要在构造器的某个地方或在使用它们之前对元素进行初始化,因为初始化早已得到了保证. 5.7.1 初始化顺序 在类的内部,变量定义的先后顺序决定了初始化

Java编程思想笔记(第二章)

第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(reference)操作对象 类似遥控器(引用)来操作电视(对象) 在Java中你可以创建一个引用,但是没有与任何对象关联,比如: String s; 这个时候如果用则会报错.安全的做法是: 创建一个引用的同时并进行初始化 String s="1111"; 必须由你创建所有对象 New关键字的意思是给我一

Thinking In Java笔记(第五章 初始化与清理(三))

第五章 初始化与清理 5.6 成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,Java以编译错误的形式来保证.如下: void f() { int i; i++; //Error:i not initialized } 会得到一条错误的消息,提示i可能没有初始化.编译器可以给i赋初值,但是并没有这么做,因为没有初始化是程序员的疏忽,为了保证程序的稳定性,能帮助程序员找出程序的缺陷所在. 但如果是类的数据成员是基本类型,类的每个基本类型成员变量都会保证有一个

java编程思想笔记(第一章)

Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5.某一特定类型的所有对象都可以接收同样的消息. Booch提出一种更简洁的描述: 对象拥有状态(state) 行为(behavior) 和标识(identity) 每个对象都有一个接口 每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method) 在面向对象的程序设

Thinking In Java笔记(第五章 初始化与清理(二))

第五章 初始化与清理(二) 5.5 清理:终结处理和垃圾回收 清理的工作常常被忽略,Java有垃圾回收器负责回收无用对象占据的内存资源.但也有特殊情况:假定对象(并非使用new)获得了一块"特殊"的内存区域,由于垃圾回收器只知道释放那些由new分配的内存,所以不知道如何释放特殊内存.Java允许在类中定义一个名为finalize()的方法,工作原理"假定"是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,首先调用其finalize()方法,并且在下一次垃圾回收动

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {