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常用命令:计算机语言发展史.
随机推荐
- My Brute HDU - 3315(KM || 费用流)
题意: 有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了Xi,那么你将获得Vi分,否则你将获得-Vi分. Si和Xi对决时,Si有初始生命Hi,初始攻击 ...
- 如何将Drawable转为Bitmap?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将讲解如何将Drawable转为Bitmap ...
- JS日期选择器
浏览器自带 浏览器自带日期控件,使用<input type="date">时,点击后会弹出. 1:EDGE 2:火狐 3:谷歌 三种都不一样.略胜于无 练习 模仿火狐 ...
- 分离式部署LNMP
-------Nginx----------PHP+NFS------------MySql------192.168.56.202 192.168.56.201 192.168.56.200安装My ...
- LOJ#6280. 数列分块入门 4
另外开一个数组维护每一个块内的总和. 给区间加值是,残余的块一个一个点更新,整个的块一次性更新 查询的时候也是,残余的块一个一个点加,整个的块一次性加 #include<map> #inc ...
- Java复习总结——注解
注解 概念及作用 概念 注解即元数据,就是源代码的元数据 注解在代码中添加信息提供了一种形式化的方法,可以在后续中更方便的 使用这些数据 Annotation是一种应用于类.方法.参数.变量.构造器及 ...
- N球M盒
N球,M盒,由于球是否相同,盒是否相同,盒是否可以为空,共2^3=8种: 1.球同,盒同,盒不可以为空Pm(N)--这符号表示部分数为m的N-分拆的个数,m是P的下标,为了好看我将大写的M弄成小写 2 ...
- AtCoder arc061C Snuke's Subway Trip
大意: 给你一张无向图,边有种类. 当你第一次/重新进入某种边时费用 + 1 在同一种边之间行走无费用. 求 1 到 n 的最小费用. 嗯...乍一看有一个很直观的想法:记录每个点的最短路的上一条边的 ...
- A1109. Group Photo
Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...
- 【洛谷P3275】糖果
题目大意:维护 M 个差分约束关系,问是否可以满足所有约束,如果满足输出一组解.\(N<=1e5\) 题解:差分约束模型可以通过构建一张有向图来求解.是否满足所有约束可以利用 spfa 进行判断 ...
