Java解惑五:类之谜
本文是依据JAVA解惑这本书,做的笔记。电子书见:http://download.csdn.net/detail/u010378705/7527721
谜题46
函数重载的问题。JAVA重载解析过程:1. 选取全部可用的方法或者构造器;2. 从过程1中选取的方法或构造器中选择最精确的。
一般而言:能够强制要求编译器选择一个精确的重载版本号,将实參转型为形參所声明的类型。
谜题47
继承中静态域的问题。
静态域由声明它的类及其全部子类共享。
假设须要让每个子类都具有某个域的单独拷贝,必须在每个子类中声明一个单独的静态域。
假设每个实例都须要一个单独的拷贝,则能够在基类中声明一个非静态域。
谜题48
静态方法的问题。
对静态方法的调用不存在不论什么动态分配机制。静态方法是编译时刻选定的,依据修饰符编译期类型选定的。
静态方法不能被覆写,仅仅能被隐藏。
尽量使用类名来调用静态方法。
谜题49
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private final int beltSize;
private static final int YEAR = Calendar.getInstance().get(Calendar.YEAR);
private Elvis() {
beltSize = YEAR - 1930;
}
public int beltSize() {
return beltSize;
}
public static void main(String[] args) {
System.out.println(INSTANCE.beltSize());
}
}初始化的问题。
final类型的静态域被初始化之前存在被读取的可能,此时该静态域仅仅是所属类型的缺省值。
final类型的域仅仅有在初始化表达式是常量表达式时,才是常量。
类的初始化循环有待进一步理解。
谜题50
instanceof的问题当instanceof左操作数为null时,返回false。
当instanceof左右操作数都是类的时候,当中一个必须是还有一个的子类型,否则编译错误。
转型操作符的行为与instanceof同样,当转型操作的两种类型都是类时,必须当中一个是还有一个子类型。
谜题51
class Point {
protected final int x, y;
private final String name;
Point(int x, int y) {
this.x = x;
this.y = y;
name = makeName(); // 3. 调用子类的方法。
}
protected String makeName() {
return "[" + x + "," + y + "]";
}
public final String toString() {
return name;
}
}
public class ColorPoint extends Point{
private final String color;
ColorPoint(int x, int y, String color) {
super(x, y); //2. 转向父类的构造函数。
this.color = color; // 5. 初始化该属性。
}
protected String makeName() {
//4.在子类的构造函数结束前运行。
return super.makeName() + ":" + color;
}
public static void main(String[] args) {
//1. 调用子类的构造函数。
System.out.println(new ColorPoint(1, 2 , "red"));
}
}构造函数调用了子类覆写的方法。
实例初始化循环,能够採用惰性初始化。
谜题52
class Cache {
static {
initializedIfNecessary();
}
private static int sum;
public static int getSum() {
initializedIfNecessary();
return sum;
}
private static boolean initialized = false;
private static synchronized void initializedIfNecessary() {
if (! initialized) {
for (int i = 0; i < 100; i++) {
sum += i;
}
initialized = true;
}
}
}
public class Client {
public static void main(String[] args) {
System.out.println(Cache.getSum());
}
}同一时候使用了惰性初始化和积极初始化。
初始化顺序对结果的影响。
改动后的程序class Cache {
private static final int sum = computeSum();
private static int computeSum() {
int result = 0;
for (int i = 0; i < 100; i++) {
result += i;
}
return result;
}
public static int getSum() {
return sum;
}
}
谜题53
讲述了私有构造器捕获惯使用方法。<span style="font-size:18px;">class Thing {
public Thing(int i) {
System.out.println("Thing:" + i);
}
}
public class MyThing extends Thing {
@SuppressWarnings("unused")
private final int arg;
public MyThing() {
this(1);//能够调用其它类的方法获取返回值。
}
private MyThing(int i) {
super(i);
arg = i;
}
}</span>
谜题54
静态方法调用时,实例不起作用。静态方法是属于类的。
谜题55
java语言规范不同意一个本地变量声明语句作为一条语句在循环中反复运行。一个本地变量声明作为一条语句,仅仅能直接出如今一个语句块中(花括号里的)。for (int i = 0; i < 10; i++)
String str = "123";
这个编译不通过,改动正确为:for (int i = 0; i < 10; i++) {
Stirng str = "123";
}
Java解惑五:类之谜的更多相关文章
- 深入分析Java反射(五)-类实例化和类加载
前提 其实在前面写过的<深入分析Java反射(一)-核心类库和方法>已经介绍过通过类名或者java.lang.Class实例去实例化一个对象,在<浅析Java中的资源加载>中也 ...
- Java解惑八:很多其它库之谜
本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...
- java十五个常用类学习及方法举例
<code class="language-java">import java.util.Scanner; import java.util.Properties; i ...
- (五)Java 对象和类
Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 消息解析 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例,有状态和行为. ...
- Java第五天,API常用类,静态(static)、集合(ArrayList)、日期(Date)、日历(Calendar)的使用方法
上文中我们学习到了Random随机数类和ArrayList<E>集合.这两个知识点都是经常用到的,那么除了这两个外,还有哪些知识点是我们所必须掌握的呢? static 使用static需要 ...
- Java实用类(五) -Math类和指定范围的随机数
1.Math类 java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率) // 绝对值 System.out.println(Math.abs(-3. ...
- java的五种数据类型解析
不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...
- Java类加载和类反射回顾
今天学习Spring,突然想重新复习一下Java类加载和类反射的.巩固一下底层原理.部分参考了李刚老师的<疯狂Java讲义>和陈雄华.林开雄的<Spring3.x企业应用开发实战&g ...
- Java常用工具类题库
一. 填空题 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是___Number__的直接子类. 包装类Inte ...
随机推荐
- PYTHON多进程并发WEB服务器(利用LINUX的FORK)
这个又牛X 一点点.. 这还不涉及IO,如果调用GEVENT之类作异步IO或非阻塞IO,那就大框架都有啦.. ############################################# ...
- [jobdu]树中两个结点的最低公共祖先
http://ac.jobdu.com/problem.php?pid=1509 此题最直观的方法是两次DFS,分别找到这两个节点的path,然后遍历path1和path2做比较,找到最后一个共同的元 ...
- I2S和PCM
http://blog.csdn.net/azloong/article/details/6536855
- SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-002-SpringFlow的组件(state\<transition>\<var>\<set>\<evaluate>)
一. In Spring Web Flow, a flow is defined by three primary elements: states, transitions,and flow dat ...
- 微小说《tree》
自己一直是一个矛盾纠结的人,计算机专业,却喜欢画画,偶尔会写些短文,寓言,或者酸酸的情诗.. 废话不多说,各位看官有兴趣便随意看看,若有些于共鸣,便共勉之. 正文 两株幼苗从土壤中破土而出,一颗天生强 ...
- 卸载Visual Studio Code后删除右键Open with Code…
Win+R,输入 regedit ,点击确认,进入注册表编辑器 Ctrl+F,搜索 Ticino ,将搜索出来的Ticino都删除就行了
- String对象不可改变的特性
1. 声明String对象 String s = "abcd"; 图1 2. 将一个字符串变量赋值给另一个String变量 String s2 = s; 图2 3. 字符串连接 s ...
- NOI2010超级钢琴 2
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 1296 Solved: 606[Submit][Status ...
- PHP静态化之真静态化
参考文献:http://blog.sina.com.cn/s/blog_66aa1142010114lc.html 采用了动态服务器技术生成静态HTML的做法,这样做的好处是:一是能减轻其服务器的负担 ...
- druid简单教程
java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...