java 单例设计模式与单例内存分析,向上转型注意事项

学习心得

一、专业课

1设计模式

设计模式(Designpattern)是在某些情况下约定俗成,被反复使用、多数人知晓的、经过分类编目的、代码设计(前辈们的开发)经验的总结

2单例设计模式

1、单例类有且只有一个实例。
  2、单例类将构造函数私有化,自己创建自己的唯一实例。
  3、单例类给所有其他对象提供唯一的实例。

(1)懒汉式单例

//懒汉式

publicclass Singleton {

//1.将构造函数私有化

private Singleton(){}

private staticSingletonsingle=null;

//(静态工厂方法 )

/*public staticSingleton getInstance() {

if (single ==null) {

single =new Singleton();

}

return single;

} */

//加入锁机制,防止多线程

/* public staticsynchronized Singleton getInstance() {

if (single ==null) {

single =new Singleton();

}

return single;

} */

//双重锁机制

/*public staticSingleton getInstance() {

if (single ==null) {

synchronized(Singleton.class) {

if(single == null) {

single= new Singleton();

}

}

}

return single;

} */

/*

*私有静态内部类

*既实现了线程安全,又避免了同步带来的性能影响

*静态内部外部不能访问,当第一次用到时,static会立马初始化

*/

private staticclass LazyHolder {

private staticfinal SingletonINSTANCE = new Singleton();

}

public staticfinal Singleton getInstance() {

returnLazyHolder.INSTANCE;

}

}

(2)饿汉式单例

//饿汉式单例类.在类初始化时自行实例化(所以天然没有多线程冲突)

classSingleton2 {

private Singleton2(){}

private static finalSingleton2single = new Singleton2();

//静态工厂方法

public staticSingleton2 getInstance() {

returnsingle;

}

}

2向上转型
publicclass Demo01 {

publicstatic void main(String[] args) {

/**

*向上转型,父类引用指向子类对象

* 1.变量获取

* 1.1普通同名变量时(包括static)访问父类的变量

* 1.2同名普通方法访问访问子类的方法

* 1.3同名static方法访问访问父类的方法

* 1.4父类访问不到子类的特有属性与方法(需强转)

*/

Animalanimal = new Dog(21, "小黄");//大转小,自动

System.out.println(animal.num);

System.out.println(animal.toString());

System.out.println(animal.number);

animal.eat();

animal.eat2();

System.out.println(animal.j);

Dogdog = (Dog) animal; //小转大,强转(引用类型强转需要,有继承或实现关系)

System.out.println(dog.i);

dog.bite();

}

}

classAnimal{

intnum = 20;

staticintnumber = 10;

intj = 2; //父类中有j

intage;

Stringname;

publicAnimal(int age, String name) {

super();

this.age= age;

this.name= name;

}

publicvoid eat() {

System.out.println("animaleat");

}

publicstatic void eat2() {

System.out.println("animaleat2");

}

@Override

publicString toString() {

return"Animal [num=" + num + ", age=" + age + ",name=" + name + "]";

}

}

classDog extends Animal{

publicDog(int age, String name) {

super(age,name);

//TODO Auto-generated constructor stub

}

intnum = 40;

inti = 4; //子类特有i

staticintnumber = 60;

publicvoid eat() {

System.out.println("dogeat");

}

publicstatic void eat2() {

System.out.println("dogeat2");

}

publicvoid bite() {

System.out.println("咬我啊");

}

@Override

publicString toString() {

return"Dog [num=" + num + ", age=" + age + ",name=" + name + "]";

}

}


//向上转型结果

20

Dog[num=40, age=21, name=小黄]

10

dogeat

animaleat2

2

4

咬我啊

//向下转型

/**

*向下转型

*/

Dogdog = (Dog)new Animal(22,"小黑");//向下转型, //要注意内存问题

dog.eat();

dog.bite();

//结果

java.lang.ClassCastException

4.多态

*概念:

*1。字面上:事物的多种形态

*2。本质:一个类的对象在编译时并不明确使用哪个对象,只有在运行时才确定,

*父类引用数据类型指向子类对象

*作用:提升对象的作用范围

*应用领域:

*1。作为参数传入

*2。作为返回值

5.学习方法



学习的四个方面

1.保持对未知领域的好奇心

2.掌握各个层面的细节

3.培养对代码的直觉

4.提升自主学习能力

银行业务背景

工作第一课

1.工作内容的由来?(慎始)

2.思考

3.发邮件,称谓是否正确,签名档是否完整,检查附件(格式),看文件的人怎么看才舒服,最后填邮箱地址

学习心得:

1.主动提高自主学习能力,多寻思不同的提高学习方法。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值