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 ...
随机推荐
- 程序不稳定是因为C++基础不扎实
最近开发的程序,逻辑上都实现了,但是感觉运行不稳定,程序时不时崩溃(不是逻辑运行不正确),至少找出2个错误: 情况1:char* szRemoteReal = new char[MAX_LENGTH] ...
- xml解析代码示例
List<Entry> list = new ArrayList<>(); Entry entry = null; try { int eventType = response ...
- Tomcat部署(转)
首先说说tomcat的几种部署方法: 1.将应用文件夹或war文件塞到tomcat安装目录下的webapps子目录下,这样tomcat启动的时候会将webapps目录下的文件夹或war内容当成应用部署 ...
- 【HDOJ】1197 Specialized Four-Digit Numbers
水题,暴力可解. #include <iostream> using namespace std; int chg(int n, int base); int main() { int i ...
- hihocoder #1289 : 403 Forbidden (2016 微软编程笔试第二题)
#1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Sometimes ...
- poj2761Feed the dogs(划分树-区间K值)
链接 这树着实不好理解啊 讲解http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html 对于找K值 右区间的确定不是太理解..先当 ...
- bzoj1007
其实吧,就是一个半平面交,而且不用考虑转回来的情况,所以只要极角排序然后用栈即可给的是点斜式,比极角很方便至于完整版的半平面交还没写过,看到再说吧 ..] of longint; v:..] of b ...
- DMG提取安装文件
打开原版的DMG文件,选中安装文件,按下鼠标右键,选择显示包内容 <ignore_js_op> 按照下图的路径,一直找到installESD.dmg,双击打开它<ignore_js_ ...
- 【转】win7 旗舰版激活密钥
原文网址:http://zhidao.baidu.com/question/1496641289562471179.html 旗舰版KH2J9-PC326-T44D4-39H6V-TVPBYTFP9Y ...
- HDU-5414 CRB and String
http://acm.hdu.edu.cn/showproblem.php?pid=5414 题意:给定字符串s和t,可以在s里面选一个字符c,然后任选一个字符d(d!=c)将d插入到c的后面,问能不 ...