Thinking In Java 4th Chap5 初始化和清理
类的构造器名必须与类名一致,且无返回类型,通过参数类型的不同(即使顺序不同也行)可以重载构造器,也可以以此技巧重载方法
this关键字:表示对“调用方法的那个对象的引用”,也可将当前对象传递给其他方法,也可通过this在构造器中调用构造器
在方法内部调用同一类的另一方法无需使用this
static方法中不得调用this,仅通过类本身便能调用static方法,产生类似于全局方法的效果
例如:class Leaf{
int i=0;
Leaf increment(){
i++;
return this;}
例如:class Peeler{
static Apple peel(Apple apple){
/*.......*/
return apple;} }
class Apple{
Apple getpeeled(){
return Peeler.peel(this);} }
在构造器中调用构造器(注意:不能在除构造器之外的任何方法中调用构造器)
例如:class Flower{
String s="Hello";
Flower(String s){
/*.......*/ }
Flower(int petal){
/*.......*/}
Flower(String s,int petal){
this(petal);//调用Flower(int petal)
this.s=s;//给构造器参数s赋值“Hello”} }
清理:(手动机制)垃圾回收仅回收垃圾占据的内存
1.对象可能不被垃圾回收
2.垃圾回收并不等于“析构”
3.垃圾回收只与内存有关
通常调用finalize()与java使用本地方法引入c&c++代码有关
finalize()不能作为所谓的java中的"析构"函数,其应用可以是终结条件的验证
强制执行终结动作:System.gc();
成员初始化:
方法的局部变量未经初始化会报错;
类的数据成员未经初始化会给予其默认值,未经初始化的对象引用为null。
类的数据成员在定义处即可进行初始化,类成员的定义顺序决定初始化顺序,静态对象优先于非静态对象进行初始化。
显式的静态初始化:
static int i;
static Cup cup1;
static{
i=19;
cup1=new Cup(1);
/*........*/}
显式的非静态初始化:(少了static关键字)
int i;
Cup cup1;
{
i=19;
cup1=new Cup(1);
/*........*/}
在java中允许将一个数组赋给另一个数组,数组元素个数可由arr.length提供
使用System.out.print(Arrays.toString(arr))可以打印一维数组arr
可变参数列表:(协助重载方法)
所有类都直接或间接的继承自Object类,故可通过创建以Object数组为参数的方法建立可变参数:
定义: static void printArray(Object[ ] args){(类型,长度不受限制)
for(Object obj:args){
/*..........*/}
/*.................*/}
调用:printArray(new Integer(19),new Float(1.9),new Double(11.11));
printArray("one","two","three");
printArray(new A(),new B(),new C());//也就是说方法中的参数类型不受限制
也可:定义:static void f(int id1,String...str1){(类型限制,长度不限)
for(String s:str1){
/*...............*/}
/*......................*/}
调用如:f( );不可行,必须带有参数
枚举:(enum也看作是一个类)
例如:定义:public enum Spiciness{
NOT,MILD,MEDIUM,HOT,FLAMING}
调用:Spiciness spn=Spiciness.HOT;
System.out.print(spn);(编译器自动调用.toString()以便打印)
for(Spiciness s:Spiciness.values()){//.values()获取枚举值
System.out.print(s+",ordinal "+s.ordinal()); //.ordina()获取顺序
enum协助switch:
完整实例:
enum Spiciness{
NOT,MILD,MEDIUM,HOT,FLAMING
}
class Burrito{
Spiciness degree;
public Burrito(Spiciness degree){
this.degree=degree;
}
public void describe(){
switch(degree){
case NOT:/*..........*/break;
case MILD:/*..........*/break;
/*...........*/
}
}
}
Thinking In Java 4th Chap5 初始化和清理的更多相关文章
- Java编程思想——初始化与清理
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化 虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
- 浅谈Java中的初始化和清理
引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...
- JAVA学习笔记--初始化与清理
编写程序时,常会由于变量没有初始化而产生各种错误:用完一个元素,如果不将其占用的内存资源释放,则会导致资源耗尽,这也很严重,为此,C++引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法,以 ...
- 【Thinking in Java, 4e】初始化与清理
[用构造器确保初始化] [方法重载] 涉及基本类型的重载 1.如果传入的数据类型小于方法中声明的形式参数类型:实际数据类型会被提升. 2.如果传入的数据类型大于方法中声明的形式参数类型:编译器报错,应 ...
- Think in Java(二):初始化与清理
1. 区分重载方法: 參数顺序的不同能够区分两个方法,只是,普通情况下千万别这么做.由于这会使代码难以维护不能通过返回值类型来区分重载方法:由于假设我直接调用f(), 此时java不知道应该调用那一个 ...
- Java基础:初始化和清理
转载请注明出处:jiq•钦's technical Blog (1) 初始化: 所以假设继承关系为:A导出B再导出C,在创建C对象的情况下的调用顺序是: * (1) A的静态域,B的静态域,C的静态域 ...
- 图解 & 深入浅出Java初始化与清理:构造器必知必会
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- Java的初始化与清理
大家都知道,Java是站在巨人的肩上成功的,它是在C&C++的基础上进一步的开发,投入面向对象开发的怀抱.Java吸取了很多以前的教训,加入自己很多独创的方式.在程序语言发展初期,许多C程序员 ...
- Java编程思想学习(五)----第5章:初始化与清理
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...
随机推荐
- Django基础之中间件
1. 引入 在之前学习的过程中,已经学会了给视图函数加装饰器来判断用户是否登录,把没有登录的用户请求跳转到登录页面. 我们通过给几个特定视图函数加装饰器实现了这个需求. 但是以后添加的视图函数可能也需 ...
- LOJ #6669 Nauuo and Binary Tree (交互题、树链剖分)
题目链接 https://loj.ac/problem/6669 题解 Orz yyf太神了,出这种又有意思又有意义的好题造福人类-- 首先\(n\)次询问求出所有节点的深度. 考虑按深度扩展(BFS ...
- Babel7知识梳理
Babel7 知识梳理 对 Babel 的配置项的作用不那么了解,是否会影响日常开发呢?老实说,大多情况下没有特别大的影响(毕竟有搜索引擎). 不过呢,还是想更进一步了解下,于是最近认真阅读了 Bab ...
- CodeForces 494B Obsessive String ——(字符串DP+KMP)
这题的题意就很晦涩.题意是:问有多少种方法,把字符串s划分成不重叠的子串(可以不使用完s的所有字符,但是这些子串必须不重叠),使得t串是所有这些新串的子串.譬如第一个样例,"ababa&qu ...
- CF1030C
CF1030C 题意: 给你一个数字,问能否拆分成k段,使得每一段的每一位数字相加结果相等. 解法: 考虑数位DP. 暴力按位考虑每一位是否满足条件 CODE: #include<cstdio& ...
- Ubuntu18.04 桌面系统的个人吐槽(主要是终端)
装了Ubuntu18.04,桌面换风格了,使用中最大的感觉是终端切换非常反人类,可能是我还没有摸清门路.原先习惯用Alt+Tab快捷键切不同终端以及不同窗口的,现在Alt+Tab时多个终端会归成一个图 ...
- ph:做参考
1 波动学 <伯克利物理学教程>第三卷 上.下册2 场论(朗道)3 场论与粒子物理学(上册)(李政道)出国留学必备书之一!4 场论与粒子物理学(下册)(李政道)5 非平衡态热力 ...
- Tensorflow使用训练好的模型进行测试,发现计算速度越来越慢
实验时要对多个NN模型进行对比,依次加载直到第8个模型时,发现运行速度明显变慢而且电脑开始卡顿,查看内存占用90+%. 原因:使用过的NN模型还会保存在内存,继续加载一方面使新模型加载特别特别慢,另一 ...
- 黑马vue---56-58、vue组件创建的三种方式
黑马vue---56-58.vue组件创建的三种方式 一.总结 一句话总结: 不论是哪种方式创建出来的组件,组件的 template 属性指向的模板内容,必须有且只能有唯一的一个根元素 1.使用 Vu ...
- FMX开源控件
FMX开源控件 这是群友谢顿做的控件,必须赞一个! https://github.com/zhaoyipeng/FMXComponents 这是loki的: https://sourceforge.n ...