JAVA核心技术I---JAVA基础知识(单例模式和final关键字)
一:单例模式
C++设计模式中提及,不再赘述设计模式---对象性能模式之单例模式(Singleton)
public class single{
static single Instance=new single();
String content;
private single(){
content="aaa";
}
public String getContent(){
return content;
}
public void setContent(String cont){
this.content=cont;
}
public static single getInstance(){
return Instance;
}
}
public class singleMode{
public static void main(String[] args){
single obj1 = single.getInstance();
System.out.println(obj1.getContent());
obj1.setContent("ddd");
single obj2 = single.getInstance();
System.out.println(obj1.getContent());
System.out.println(obj2.getContent());
if(obj1==obj2){
System.out.println("obj1==obj2");
}else{
System.out.println("obj1!=obj2");
}
}
}
aaa
ddd
ddd
obj1==obj2
二:final关键字(同C中const)
Java的final关键字同样可以用来修饰
–类
–方法
–字段
final的类,不能被继承
父类中如果有final的方法,子类中不能改写此方法
类中字段若是用final修饰,不允许修改值
final的变量,不能再次赋值。
– 如果是基本型别的变量,不能修改其值;
– 如果是对象实例,那么不能修改其指针(但是可以修改对象内部的值;
类:

方法:

字段:
变量基本类型:

变量为对象:不可以修改指针,可以修改对象的值

总结:
–final类:没有子类继承
–final方法:不能被子类改写
–final变量:基本类型不能修改值,对象类型不能修改
三:static和final问题
问题一:static代码块和实例化代码块执行时间
以下代码执行结果是
class StaticTest{
static{ //static静态块
System.out.print("a ");
}
{ //实例化块
System.out.print("b ");
}
public static void main(String[] args) {
StaticTest st2 = new ChildTest(); //main1
System.out.print(“ # ”); //main2
StaticTest st = new StaticTest(); //main3
}
}
class ChildTest extends StaticTest{
static{
System.out.print("c ");
}
}
A.a c b # a b B.a b c # a b c C.a c b # b D.a b c # a b
执行main函数时,会首先加载StaticTest(因为main函数就在StaticTest类中)。所以将StaticTest的静态块代码按照顺序执行,输出a .
然后执行main函数第一句话,new一个ChildTest对象,那就需要加载ChildTest类,也把它的所有静态块都执行一遍。
在执行ChildTest的静态块之前,会将执行ChildTest的父类的静态块代码
。注意,任意一个类的一个静态块代码在整个生命周期里面只执行一次。
//main1语句再输出c,然后new ChildTest()将调用父类的构造函数和(非静态的)匿名块,再输出b.
//main2输出#,
//main3将执行StaticTest的所有静态块和(非静态的)匿名块。由于静态块都执行过了,就剩下(非静态的)匿名块,所以输出b。
static代码块随着类的产生开始执行,所以先与实例化代码块。
因为实例化代码块必须在实例化对象时才会执行,之后执行构造方法。
其次:static代码块只执行一次,之后实例化对象不再执行
问题二:final修饰变量
class FinalTest{
final int num = ;
public static void main(String[] args) {
final FinalTest ft = new FinalTest();//
ft.num = ;//2
//
System.out.println(ft.num);//
}
}
A.编译通过,但在//3处加上 ft.num ++; 后编译报错 B.编译通过,但在//3处加上 ft = new FinalTest(); 后编译报错 C.编译不通过,去除//1的 final 后编译通过 D.编译不通过,删除//2 整行后编译通过
因为num是基本类型的变量,且被final了,所以不能修改其值,因此选D
JAVA核心技术I---JAVA基础知识(单例模式和final关键字)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- “全栈2019”Java第一百零八章:匿名内部类与final关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十一章:继承与final关键字详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
随机推荐
- BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏
题目描述 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色 ...
- Number Sequence POJ - 1019 递推 数学
题意 1 12 123 1234 12345 ....这样的序列 问第n位数字是几 是数字! 1-9! 思路:递推关系 主要是位数的计算 用a[i]=a[i-1]+(int)log10((do ...
- fullcalendar 日历插件3.9.0 -- 基本插件使用
以下主要结构,直接执行即可以使用 ,仅用参考: html: <!DOCTYPE html> <html> <head> <title>test</ ...
- Android 获取SD路径,存储空间大小的方法
Android用 Environment.getExternalStorageDirectory() 方法获取 SD 卡的路径 , 卡存储空间大小及已占用空间获取方法 : /* 获取存储卡路径 */ ...
- #1014 : Trie树 HihoCoder(字典树)
描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...
- Python3 与 C# 面向对象之~异常相关
周末多码文,昨天晚上一篇,今天再来一篇: 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.les ...
- 闲聊javascript继承和原型
javascript继承已经是被说烂的话题了,我就随便聊一点~ 一.javascript的复制继承 javascript的继承有复制继承和原型继承,基于复制继承用的不太多,而且无法通过instance ...
- Opennebula常用命令
查看虚拟机状态信息: [oneadmin@localhost /]$ onevm list 查看虚拟机配置: [oneadmin@localhost /]$ onevm show 25 启动虚拟机: ...
- Docker系列教程05 容器常用命令
https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...
- Spring 整合 Hibernate 时启用二级缓存实例详解
写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 a ...
