1. 每个重载的方法都必须有独一无二的参数类型列表。(参数顺序的不同也足以区分两个方法,但不建议这样做,会使代码难以维护。)

2. 方法重载时,如果可以重载的方法间只是参数类型不同,传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升至该方法所接受的类型。 char 型略有不同,如果无法找到恰好接受 char 参数的方法,就会把 char 直接提升至 int 型。( P81 )

如果传入的实际参数较大,就得通过类型转换来执行窄化转换。如果不这样做,编译器就会报错。即先类型转换,后传入参数。

3. 要是你没有提供任何构造器,编译器会认为“你需要一个构造器,让我给你制造一个吧”;但假如你已写了一个构造器,编译器就会认为“啊,你已写了一个构造器,所以你知道你在做什么;你是刻意省略了默认构造器。”即编译器此时是不会为你制造一个默认构造器的。

4. this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。

5. 可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码,可用this 关键字做到。此时,在构造器中,如果为 this 添加了参数列表,将产生对符合此参数列表的某个构造器的明确调用。如:

public class A{

A(String s){

}

A(String s,int i){

this(s);// 相当于 A(s);

}

}

然而,需要遵守如下规则:

( 1 )尽管可以用 this 调用一个构造器,但却不能在一个构造器中调用两个构造器,即在一个构造器中最多只能调用一个构造器;

( 2 )必须将构造器调用置于最起始处,否则编译器会报错;

( 3 )除构造器之外,编译器禁止在其他任何方法中调用构造器。

6. static 方法就是没有 this 的方法。在 static 方法的内部不能调用非静态方法,当然,这不是完全不可能:如果你传递一个对象的引用到静态方法里,然后通过这个引用,你就可以调用非静态方法和访问非静态数据成员了。

7. Java 中垃圾回收遵守的原则:

( 1 )对象可能不被垃圾回收;

( 2 )垃圾回收并不等于“析构”;

( 3 )垃圾回收只与内存有关。

如果 JVM 并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。

8. 在 C++ 中可以创建一个局部对象(也就是在栈上创建,这在 Java 中行不通),在 Java 中不允许创建局部对象,必须使用 new 创建对象。( Java 对象都在堆上创建,不能在栈上创建 

9. 在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。

10. 静态对象的初始化先于非静态对象,静态对象只被初始化一次。

11. 在声明数组时,编译器不允许指定数组的大小。即这样: int a[10]; 编译器会报错。数组元素中的基本数据类型值会自动被初始化。

12. switch 与 enum 是绝佳的组合。

Java编程思想学习(三) 初始化与清理的更多相关文章

  1. Java编程思想学习笔记——初始化与清理

    初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际 ...

  2. Java编程思想学习笔记——初始化与清理(二)

    成员初始化 Java尽力保证:所有变量在使用前都能得到适当的初始化. 方法的局部变量:未初始化,编译错误. void f(){ int i; // System.out.println(i);//编译 ...

  3. 《 Java 编程思想》CH05 初始化与清理

    < Java 编程思想>CH05 初始化与清理 用构造器确保初始化 在 Java 中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.Java 会保证初始化的进行.构造器采用与类相 ...

  4. Java编程思想学习(三)----第三章:操作符

    3.2使用Java操作符 操作符接受一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可以改变操作数自身的值.几乎所以的操作符都只能操作“基本类型”.例外的操作符有“=”, ...

  5. Java编程思想学习(八) 内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...

  6. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  7. java编程思想--学习心得

    学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是 ...

  8. Java编程思想学习(一)----对象导论中多态的理解

    1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...

  9. Java编程思想学习(五)----第5章:初始化与清理

    随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...

随机推荐

  1. C# explicit与implicit

    1.它们解决什么问题? 考虑下面的需求,Person类有个字段age.我想使用Person p = (Person) 18 来创建一个age为18的Person对象,怎么办? 更进一步,我想使用Per ...

  2. 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇

    调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userName:{fi ...

  3. 006医疗项目-模块一:用户的查找:2.用户表查询的mapper映射的文件

    前一篇文章已经把sql语句写好了并且在PL/SQL上调试过了,是可以的.这篇文章是写对应的mapper.xml, 第一步我们先通过逆向工程去构建每个表的mapper.xml文件和pojo类.这个我们在 ...

  4. 解决 php-cgi 启动时提示缺少 msvcr110.dll 的问题

    问题描述: 启动 php-cgi 时如果提示缺少 msvcr110.dll 问题原因: 缺少 vc 2012 运行库   问题解决: 需要安装 vcredist_x64.exe 或 vcredist_ ...

  5. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  6. linux添加时间提示符

    给PS1添加\t [root@lanny ~]# echo $PS1 [\u@\h \W]\$ [root@lanny ~]# export PS1="[\u@\h \W\t]\$" ...

  7. Linux 网络编程五(UDP协议)

    UDP和TCP的对比 --UDP处理的细节比TCP少. --UDP不能保证消息被传送到目的地. --UDP不能保证数据包的传递顺序. --TCP处理UDP不处理的细节. --TCP是面向连接的协议 - ...

  8. js运动框架 step by step

    开启setInterval定时器之前,请先清除之前的定时器 window.onload = function() { var btn = document.getElementById('btn'); ...

  9. 专门用于微信公众平台的Javascript API

    1 /**! 2 * 微信内置浏览器的Javascript API,功能包括: 3 * 4 * 1.分享到微信朋友圈 5 * 2.分享给微信好友 6 * 3.分享到腾讯微博 7 * 4.新的分享接口, ...

  10. Asp.Net MVC 4 Web API 中的安全认证-使用OAuth

    各种语言实现的oauth认证: http://oauth.net/code/ 上一篇文章介绍了如何使用基本的http认证来实现asp.net web api的跨平台安全认证. 这里说明一个如何使用oa ...