本文是依据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解惑五:类之谜的更多相关文章

  1. 深入分析Java反射(五)-类实例化和类加载

    前提 其实在前面写过的<深入分析Java反射(一)-核心类库和方法>已经介绍过通过类名或者java.lang.Class实例去实例化一个对象,在<浅析Java中的资源加载>中也 ...

  2. Java解惑八:很多其它库之谜

    本文是依据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成 ...

  3. java十五个常用类学习及方法举例

    <code class="language-java">import java.util.Scanner; import java.util.Properties; i ...

  4. (五)Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 消息解析 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例,有状态和行为. ...

  5. Java第五天,API常用类,静态(static)、集合(ArrayList)、日期(Date)、日历(Calendar)的使用方法

    上文中我们学习到了Random随机数类和ArrayList<E>集合.这两个知识点都是经常用到的,那么除了这两个外,还有哪些知识点是我们所必须掌握的呢? static 使用static需要 ...

  6. Java实用类(五) -Math类和指定范围的随机数

    1.Math类 java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率) // 绝对值 System.out.println(Math.abs(-3. ...

  7. java的五种数据类型解析

    不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...

  8. Java类加载和类反射回顾

    今天学习Spring,突然想重新复习一下Java类加载和类反射的.巩固一下底层原理.部分参考了李刚老师的<疯狂Java讲义>和陈雄华.林开雄的<Spring3.x企业应用开发实战&g ...

  9. Java常用工具类题库

    一.    填空题 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是___Number__的直接子类. 包装类Inte ...

随机推荐

  1. cxf2.4.3中jaxb-api.jar、jaxws-api.jar与jdk1.6.0_02不兼容问题

    http://chxiaowu.iteye.com/blog/1243475 Exception in thread "main" java.lang.NoClassDefFoun ...

  2. java客户端连接MongoDB数据库的简单使用

    1.下载mongoDB的jar包,并引入到工程的CLASSPATH中下载:mongodb2.5驱动包下载 如果使用maven项目,最新的依赖如下: <dependency> <gro ...

  3. Easyui Datagrid rownumbers行号四位、五位显示不完全的解决办法

    Easyui Datagrid rownumbers行号四位.五位显示不完全的解决办法(引) 方法一: 相信很多人在使用easyui的时候都遇到过这个问题,当我们设置成显示Rownumber的时候,你 ...

  4. MyGui 3.2.0(OpenGL平台)的编译(五篇文章)

    MyGui是一个用来创建用户图形界面的库,用于游戏和3D应用程序.这个库的主要目标是达到:快速.灵活.易用. 1.下载准备: 源代码:http://svn.code.sf.net/p/my-gui/c ...

  5. 【大话QT之十】实现FTP断点续传(需要设置ftp服务器为“PASV”被动接收方式)

    应用需求: 网盘开发工作逐步进入各部分的整合阶段,当用户在客户端修改或新增加一个文件时,该文件要同步上传到服务器端对应的用户目录下,因此针对数据传输(即:上传.下载)这一块现在既定了三种传输方式,即: ...

  6. 打死也不换系统?笑谈过气的Windows XP

    http://tech.qq.com/a/20131012/007336.htm 按照IT领域的“安迪-比尔定律”:软件和游戏不断生成过户需求,硬件则通过技术创新来消化这些需求,这个过程会刺激用户在电 ...

  7. 【PythonChallenge】Level 5

    题目主要找发声类似于Peak Hell的Python模块,查了一下手册pickle已经是最像的了.看了一下源代码,发现panner.p.如同发现了新大陆,拷贝内容.使用pickle解答.答案为chan ...

  8. 【HDOJ】1114 Piggy-Bank

    DP,先将coins按照重量排序可以优化. #include <stdio.h> #include <stdlib.h> #define MAXNUM 10005 #defin ...

  9. poj3037

    首先到每个点的速度实际上是一个定值,就是v0*2^(起点与当前点高度差) 所以当前点i到任意一个相邻点的时间都是一个定值, 不难想到构图最短路径 ..] ,,,);       dy:..] ,,-, ...

  10. [转] HDU 题目分类

    转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...