一:单例模式

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关键字)的更多相关文章

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  2. Java核心技术 卷1 基础知识-第一天

    基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...

  3. “全栈2019”Java第一百零八章:匿名内部类与final关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. “全栈2019”Java第五十一章:继承与final关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  6. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

  7. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  8. java 程序运行的基础知识【Java bytecode】

    聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...

  9. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

随机推荐

  1. kubernetes 基本命令

    查询命令: kubectl get pods -n kube-system kubectl get ClusterRole -n kube-system kubectl get ClusterRole ...

  2. puppet一些常用的参数

    puppet一些常用的参数 通过@,realize来定义使用虚拟资源 虚拟资源主要来解决在安装包的时候,互相冲突的问题 具体参考这里 简单说下,在定义资源的时候加上@ 例如: @package { & ...

  3. JavaScript——JS屏蔽F12和右键

    键盘表 来源:http://www.phpweblog.net/kiyone/archive/2007/04/19/1138.html 通过onkeydowm监听键盘按下事件,并修改键盘码 //禁止F ...

  4. Dividing POJ - 1014 多重背包二进制优化

    多重背包模型  写的时候漏了一个等号找了半天 i<<=1 !!!!!! #include<iostream> #include<cstdio> #include&l ...

  5. Android RadioGroup 学习

    Api 参考地址 博文地址 RadioGroup相关属性: //返回该单选按钮组中所选择的单选按钮的标识 ID,如果没有选中的单选按钮则返回 -1. RadioGroup.getCheckedRadi ...

  6. Ability

    Base:网络安全,sklearn(ML),日本語,企业存储 Branch1:自动化,Git Branch2:HW系统架构 Branch3:shadowsocks源码:

  7. NOI2018d1t1 归程 (dijkstra+kruskal重构树)

    题意:给一张无向联通图,每条边有长度和高度,每次询问在高度大于p的边,从v点能到达的所有点到1号点的最短距离(强制在线) 首先dijkstra求出每个点到1号点的距离 易知:如果我按高度从高到低给边排 ...

  8. gevent多协程运用

    #导包 import gevent #猴子补丁 from gevent import monkey monkey.patch_all() from d8_db import ConnectMysql ...

  9. Apache Ant 项目构建

    项目构建:通过构建工具对多个项目进行统一批量的编译和运行,比如,对多个Jmeter脚本批量运行 1.Ant是什么? Ant是 构建工具,Apache Ant是一个将软件编译.测试.部署等步骤联系在一起 ...

  10. CAS (多线程保证原子性)

    面试必问的CAS,你懂了吗? 置顶 2018年03月14日 22:29:19 程序员囧辉 阅读数:29612   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...