博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黑马程序员-----面向对象 静态块、代码块、同步块 构造方法、匿名对象、 单例定义以及实现...
阅读量:5167 次
发布时间:2019-06-13

本文共 2472 字,大约阅读时间需要 8 分钟。

/**

* @author Administrator
*
* @description 静态块、代码块、同步块学习测试类
* @history
*/
class BlockDemo {
static {
// 在类中定义的static{ //...}为静态代码块
// 静态代码块的程序只会被初始化一次
System.out.println("BlockDemo->static");
} {
// 在类中定义的{ //...}为构造代码块
// 构造代码块和对象一起初始化的
System.out.println("BlockDemo->{}");
}
public BlockDemo() {
System.out.println("BlockDemo->BlockDemo");
}
// 构造方法、构造代码块和静态代码块初始化顺序呢?
// 静态块、构造块、构造方法 // 表面初步分析,具体有待研究
}
public class MyDemo {
/**

* @description

* @param args
*/
public static void main(String[] args) {
// 静态块、代码块、同步块
{
// 在方法中用{ //... }定义的为普通代码块
int x = 100;
System.out.println(x); // 100 相当于局部变量
}
int x = 200;
System.out.println(x); // 200
new BlockDemo();
new BlockDemo();
// BlockDemo->static static代码块只会被初始化一次
// BlockDemo->{}
// BlockDemo->BlockDemo
// BlockDemo->{}
// BlockDemo->BlockDemo
}
}

————————————————————————————————————————————————————————————

/**

* @author Administrator
*
* @description 构造方法、匿名对象、单例学习测试类
* @history
*/
public class MyDemoTest {
private String username; // 定义私有属性username
// 构造方法的作用是初始化操作
// 构造方法是一种特殊的方法,构造方法也有重载
public MyDemoTest(){
// 无参数构造方法
}
public MyDemoTest(String username) { // 定义构造方法
this.username = username; // 对属性初始化赋值操作
}
/**
*@description
*@param args

*/

public static void main(String[] args) {
// 实例化一个匿名对象
// 匿名对象不在栈中开辟空间赋地址值
new MyDemoTest("eclipse");
}
}
/**
* @author Administrator
*
* @description 单例学习测试类
* @history
*/
class Singleton {
private Singleton() {
// 将构造方法私有化,外部不能直接调用
System.out.println("private Singleton(){//...}");
}
// 饿汉式获取单例代码
private static Singleton instance = new Singleton();
// 对外提供一个getInstance方法获取单例
public static Singleton getIntance() {
return instance;
}
}
class Singleton2{
private Singleton2(){
// 构造方法私有化,外部不能直接调用
System.out.println("private Singleton2(){//...}");
}
// 懒汉式获取单例代码
private static Singleton2 instance = null;
private static Object lock = new Object();
// 获取单例方法,效率比较低
// 每次进入都要进行锁判断,而实际情况我们是第一次null比较特殊
/*public static Singleton2 getIntance(){
synchronized (lock) {
if (instance == null) { // 如果为null进行实例化对象操作
instance = new Singleton2();
}
}
return instance;

}*/

// 上面同步代码的另外一种写法如下,效率比较低
// public static synchronized getInstance(){ //...}
// 对同步代码进行改写
public static Singleton2 getIntance(){
if(instance == null){
synchronized(lock){
if(instance == null){ // 进行双重检验操作
instance = new Singleton2();
}
}
// 如果换为下面这种形式那么就可能不是产生一个实例对象了
/*synchronized(lock){
instance = new Singleton2();
}*/
}
return instance;
}
}

 

转载于:https://www.cnblogs.com/castworld/p/4868784.html

你可能感兴趣的文章
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
3.6 字符串
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>
Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法
查看>>
python flask解决上传下载的问题
查看>>
博客园原始直链视频插入
查看>>
语法测试
查看>>
代码高亮测试
查看>>
CES1
查看>>
CES2
查看>>
python 数据类型_数组和元组
查看>>
python 数据类型_整数_浮点数
查看>>
数据结构----prim算法 最小生成树
查看>>
python 数据类型_字典和集合
查看>>
算法笔记_170:历届试题 分糖果(Java)
查看>>
一种并行随机梯度下降法
查看>>
文件方式实现完整的英文词频统计实例
查看>>
ListControl的用法
查看>>