Java解惑五:类之谜

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”;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119018.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月23日 下午10:00
下一篇 2021年11月23日 下午11:00


相关推荐

  • 如何使用StarUML画类图[通俗易懂]

    此篇文档旨在介绍类图以及如何通过StarUML工具画类图。StarUML官网下载地址:http://staruml.io/download**什么是类图** 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助简化对系统的理解。**类与接口的表现形式**矩形框:它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性…

    2022年4月15日
    782
  • Pycharm 开发环境设置-汇总「建议收藏」

    Pycharm 开发环境设置-汇总「建议收藏」声明:大部分设置来此网络资源,部分来自个人总结。部分资源来自连接如下:1. https://www.cnblogs.com/zhongyuping/p/6417071.html Pycharm验证来此:2018版本,Unbunt16.04环境一 创建文件时自动添加头文件1.1python创建设置找到该路径并添加以下信息File-&gt;settings-&gt;Ed…

    2022年8月27日
    4
  • 计算机网络复习题

    计算机网络复习题1.计算机网络从逻辑功能上可分成(通信子网)和(资源子网)。2.网络的低层模块向高层提供功能性的支持称之为(服务)。3.TCP/1P标准模型从高到低分别是(应用层)、(运输层)、(网络层)、(链路层)和(物理层)。4.在一个物理信道内可以传输频率的范围称为(带宽)。5.计算机网络依据网络传输技术来分类,主要有(广播式)和(点对点式)两类。6.通信双方在进行通信之前,需要事先建立一个可以彼此沟通的的通道,这种通信方式称为(面向连接)的通信。7.因特网上提供的主要信息服务有(电子邮件)、(WWW

    2025年11月29日
    8
  • 使用Blat发邮件

    使用Blat发邮件定时发送邮件相信很多人都遇到过 比如说每天 7 点整 要把前 24 小时在网站上产生的数据提交给相应的部门做后期处理 今天我们来介绍一款 短小精悍 的小工具 Blat 来实现这个功能 WhatisBlat BlatisaWindo 32 amp 64bit commandlineu

    2025年8月21日
    5
  • Web 前端开发学习资料整理

    以前学习过一段时间的web前端开发,整理了一些我看过的/我认为比较好的学习资料(网站、书籍)。我只是闲来无事整理一下,如有不足,嘴下留情..毕竟分享不是一件坏事,共同学习…一、语言基础(以书和网站为主)1.HTML&CSS:(1)入门:Codeademy上的html&css课程——在线交互式编程平台,弄清楚基本概念和基本语法w3school上的HTML/CSS教程——

    2022年4月16日
    56
  • [经验分享] 【统计小百科】你知道AIC准则么?[通俗易懂]

    [经验分享] 【统计小百科】你知道AIC准则么?[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

    2022年5月23日
    83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号