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 ...
随机推荐
- VirtualBox虚拟vdi磁盘扩容
http://blog.chinaunix.net/uid-25627207-id-3342576.html
- 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...
- php stdClass Object 问题
Array ( [0] => stdClass Object ( [term_id] => 3 [name] => apache [slug] => apache [term_ ...
- 【HDOJ】1097 A hard puzzle
题目和1061非常相似,几乎可以复用. #include <stdio.h> ][]; int main() { int a, b; int i, j; ; i<; ++i) { b ...
- 【HDOJ】1098 Ignatius's puzzle
数学归纳法,得证只需求得使18+ka被64整除的a.且a不超过65. #include <stdio.h> int main() { int i, j, k; while (scanf(& ...
- FRM-40401 No changes to save error
FAQ: I have updated a table from the form and written a update statement in the when-button-pressed ...
- 转自 z55250825 的几篇关于FFT的博文(三)
题目大意:给出n个数qi,定义 Fj为 令 Ei=Fi/qi,求Ei. 其实这道题就是看到有FFT模板才觉得有必要学一下的... 所以实际上就是已经知道题解了... = ...
- [原创][下载]Senparc.Weixin.MP-微信公众平台SDK(C#) - 已支持微信6.x API
因为正在计划做一个微信机器人,需要用ASP.NET,找了一下只有PHP的SDK,没有C#的,于是动手写了一个,已经全面支持微信6.x所有接口,包括多客服.卡券.微信支付等. 微信公众平台地址:http ...
- Android PagerAdapter
本基类是ViewPager提供填充页面内容的适配器(数据与显示内容之间桥梁).通常,人们不是直接使用本基类的,而是使用这个基类的实现:FragmentPagerAdapter 或者Fragment ...
- Prism的IEventAggregator事件聚合器, 事件订阅发布, ViewModel之间的通讯
WPF中时常会遇到ViewModel之间的通讯,ViewModel并不知道自己的View,但是一个View发生的更改需要通知另外一个View. 举一个例子,软件界面上有个人信息,打开一个界面更改用户的 ...