《Java编程思想》笔记 第五章 初始化与清理
1.构造器
- 因为创建一个类的对象构造器就会自动执行,故初始化某些东西特好
2.方法重载
- 方法名相同,参数列表不同。
2.1 区分重载方法
- 方法重载后区别不同方法的就是方法签名 -->参数类型和个数(参数顺序不同也能区分但一般不考虑顺序)
2.2 涉及基本数据类型的重载
- 范围由小到大:byte > short > char > int > long > float > double
- 自动提升: 传入类型小于声明类型,传入值提升至与其最近的类型,该类型参数的方法被调用
- 传入类型大于声明,只有将传入类型强制转换才能传入
3.构造器及其重载
- 不显示写出默认无参构造器则编译器会默认添加一个默认无参构造器,一但写出任何构造器则不会添加默认无参构造器。
- 重载构造器跟重载方法一样(重载了构造器则默认构造器不存在了,要使用默认构造器就要手动写出来),在创建对象时在构造器中方法签名区分
4.this作用
- this只能用在方法中,表示调用所在方法的对象。
- 构造器中调用重载构造器,只能是在构造器的第一句,且只能调用一个构造器,且只有构造器可以调用构造器。
- this(参数) 根据参数不同调用不同构造器
- 代表数据成员 this.s。 s不是参数也不是局部变量
- 调用其他方法 this.fun()
- 作为返回值 return this ,返回的是调用此方法的对象
5.关于static
- static方法就是没有this的方法
- static 修饰的成员变量是类变量,是该类的Class对象的成员,没有static修饰的变量属于对象实例,一个JVM内一个类只对应一个Class对象,但可以创建多个实例对象。
- static方法不能直接调用非静态方法,非静态方法可以调用静态方法,
- 直接是说不能在静态方法中不通过对象调用非静态方法。因为静态方法或者静态域在编译期就确定了所属类,而普通方法要运行时才确定。
- 调用一个非静态方法必须要使用对象引用调用 对象引用.f();
- static方法不需要对象就可直接调用, 类. static方法名
6.清理:终结处理和垃圾回收
- 垃圾回收器只回收经new分配的内存
- 对象可能不被回收
- 垃圾回收不等于构析
- 垃圾回收只与内存有关,只要内存用不完对象就不会被回收,因为垃圾回收器也是要消耗内存的。
6.1 finalize() 方法
- 在垃圾回收器准备释放对象内存时,先会调用finalize()方法。每个类都默认有一个finalize()方法,此方法可以用来进行对对象终结条件的验证。
7.初始化顺序:
1.将对象内存空间初始化为二进制0(所有的数据成员被设为默认值)
2.如果该类有基类则初始化其基类
3. 静态成员和静态域(谁在前谁先初始化,且在内存中只占一份空间,同一个类不同对象可以共享)
4.main方法
5.非静态成员变量,引用,实例初始化 被初始化
6. 构造器
注意
初始化顺序中的1,2,3,4,为类加载过程,5,6为创建对象过程,只有创建了对象才会执行。查看详细信息
8.数组初始化
- 定义数组 int[ ] a1; 数组保存同一类型的数据
- 初始化: int[ ] a1 = { 1, 2, 3 ,4 }; Integer[ ] a1 = { new Integer(2), 3, 4}; //自动包装机制,Integer[ ] a1 = new Integer[ ] { 2, 3, 4 }
- int[ ] a2; a2 = a1; 引用复制,指向同一数组
- int[ ] a3 = new int[5]; 只定义了数组大小(索引 0-4),其中数据并未赋值,默认初始化为0,null,false .
- a3.length 返回数组元素个数5 ,注意不是a3.length(),这是属性不是方法,而String 的字符数量是length() 方法。
- 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;
《Java编程思想》笔记 第五章 初始化与清理的更多相关文章
- java编程思想笔记(1)
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- 《Java编程思想》第一二章
前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
- Java编程思想 4th 第1章 对象导论
所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...
- Java编程思想笔记
打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通 ...
- java编程思想第五章初始化与清理
5.1使用构造器确保初始化: 构造器与一般方法一样,但是没有返回值,且其方法名与类名完全相同. 不接受任何参数的构造器成为默认构造器,也叫无参构造器. 5.2 方法重载: 为什么会有方法重载? 构造器 ...
随机推荐
- const用法详解(转)
http://www.cnblogs.com/StudyRush/archive/2010/10/06/1844690.html 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也 ...
- 【python】实现一个python编程的小时钟!
[本实验内容] 1.GUI.PyQT5介绍2.实现此次实验效果 [一 GUI.PyQt5介绍] 1.Python简介 2.GUI介绍 几个常用的Python GUI库: (1)wxPython (2) ...
- Java中Model1和Model2
Model1和Model2是java web的两种架构模式.这两种模式各有优缺点,都有各自适合使用的场景. Model1 首先,从分层的角度说,Model1模式可以看作是由两层组成:视图层和模型层. ...
- DELPHI控件属性事件说明
常用DELPHI控件属性事件设置说明 常用DELPHI控件属性设置说明目录TForm Class TPanel组件 TToolBar Class TToolButton Class TTimer Cl ...
- 【其他】Windows 系统安装IIS 打开页面出现空白解决方案
部署IIS过程中遇到了一个奇怪的问题,就是怎么设置打开的页面都是一篇空白,IIS也没有任何报错,翻遍互联网好不容易找到了解决方法,今天就教给大家,希望大家不要走弯路.此方法Windows xp.7.8 ...
- Impala-1
Impala相关操作上 阅读目录 序 数据库相关 表相关 系列索引 序 上一篇,我们介绍Impala的介绍及安装. 下面我们开始继续进一步的了解Impala的相关操作. 数据库相关 一:创建 ...
- 【题解】SDOI2009学校食堂
不知道有没有人跟我有一样的感觉……实际上很多的状压DP都不难,然而调到心碎……这题题面看起来很长,还有混合的‘位运算’来吓唬人(实际上就是异或而已).但实际上只要仔细阅读,发现也是一道水水的裸题. 首 ...
- 【题解】APIO2007动物园
首先一眼感受到这题特别的性质……5个?这么小的,感觉就像是状压.脑补了一下,如果没有环的话应该很好做吧……有环怎么办?5真的很小的,随便乱搞肯定也可以.那就放在外面暴力枚举吧.然后正解就出来了. 然而 ...
- BZOJ2818 GCD 【莫比乌斯反演】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 6826 Solved: 3013 [Submit][Status][Discuss ...
- 修改innodb_flush_log_at_trx_commit参数提升insert性能
最近,在一个系统的慢查询日志里发现有个insert操作很慢,达到秒级,并且是比较简单的SQL语句,把语句拿出来到mysql中直接执行,速度却很快. 这种问题一般不是SQL语句本身的问题,而是在具体的应 ...