今天是周五,明天就是周末啦,爽哦。这一周把JAVA的基础算是学完了,搞明白了很多之前不懂得东西,嘿嘿嘿,怪我之前不好好学习哦。就这样,不多写了,洗个脸睡觉去,明天恰火锅。
/**
* 在方法中,使参数引用指向一个新的对象
*
* 外面的引用是指向原来的对象?还是新的对象?
*/
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public Hero(){
}
public Hero(String name,float hp){
this.name = name;
this.hp = hp;
}
//复活
public void revive(Hero h){
//此时方法内的h指向Hero对象,开辟了一块新的内存,并不是teemo所指向的内存
h = new Hero("提莫",383);
//h.hp = 383; 这样的话不重新引用对象,对应的方法内直接修改传入参数的属性或者调用方法,参数就传过去了
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫",383);
//受到400伤害,挂了
teemo.hp = teemo.hp - 400;
//调用方法后内存指向发生变化了
teemo.revive(teemo);
System.out.println(teemo.hp);
}
}package charactor;
/**
* 对象属性的初始化有三种方式
* 故意把初始化块,放在构造方法下面,问题:
*
* 这三种方式,谁先执行?谁后执行?
* (静态变量、静态初始化块)>(变量、初始化块)>构造器
* 最后执行的是构造器初始化
*/
public class Hero {
public String name = "声明初始化";
public Hero(){
name = "构造器初始化";
}
{
name = "初始化块";
}
public static void main(String[] args) {
Hero hero = new Hero();
System.out.println(hero.name);
}
}饿汉式
package charactor;
/**
* 1、单例类只能有一个实例。
* 2、单例类必须自己创建自己的唯一实例。
* 3、单例类必须给所有其他对象提供这一实例。
*/
public class GiantDragon {
//私有化构造方法使得该类无法在外部通过new 进行实例化
private GiantDragon(){
}
//饿汉式单例类.在类初始化时,已经自行实例化
//准备一个类属性,指向一个实例化对象。 因为是类属性,所以只有一个
public static GiantDragon instance = new GiantDragon();
//public static 方法,提供给调用者获取定义的对象
public static GiantDragon getInstance(){
return instance;
}
}
package charactor;
public class TestGiantDragon {
public static void main(String[] args) {
//通过new实例化会报错
// GiantDragon g = new GiantDragon();
//只能通过getInstance得到对象
GiantDragon dragon1 = GiantDragon.getInstance();
GiantDragon dragon2 = GiantDragon.getInstance();
GiantDragon dragon3 = GiantDragon.getInstance();
System.out.println(dragon1 == dragon2);
System.out.println(dragon2 == dragon3);
}
}懒汉式
package charactor;
/**
* 1、单例类只能有一个实例。
* 2、单例类必须自己创建自己的唯一实例。
* 3、单例类必须给所有其他对象提供这一实例。
*/
public class GiantDragon {
//私有化构造方法使得该类无法在外部通过new 进行实例化
private GiantDragon(){
}
//准备一个类属性,用于指向一个实例化对象,但是暂时指向null
private static GiantDragon instance;
//public static 方法,返回实例对象
public static GiantDragon getInstance(){
//第一次访问的时候,发现instance没有指向任何对象,这时实例化一个对象
if(null==instance){
instance = new GiantDragon();
}
//返回 instance指向的对象
return instance;
}
}
package charactor;
public class TestGiantDragon {
public static void main(String[] args) {
//通过new实例化会报错
// GiantDragon g = new GiantDragon();
//只能通过getInstance得到对象
GiantDragon dragon1 = GiantDragon.getInstance();
GiantDragon dragon2 = GiantDragon.getInstance();
GiantDragon dragon3 = GiantDragon.getInstance();
System.out.println(dragon1 == dragon2);
System.out.println(dragon2 == dragon3);
}
}单例模式三元素
- 构造方法私有化
- 静态属性指向实例
- public static的 getInstance方法,返回第二步的静态属性
{
public static void main(String[] args) {
for (HeroType heroType : HeroType.values()){
switch (heroType){
case ASSASSIN:
System.out.println(heroType+" 刺客");
break;
case ASSIST:
System.out.println(heroType+" 辅助");
break;
case FARMING:
System.out.println("打野");
break;
case PUSH:
System.out.println("推进");
break;
case RANGED:
System.out.println("远程");
break;
case TANK:
System.out.println("坦克");
break;
case WARRIOR:
System.out.println("近战");
break;
case WIZARD:
System.out.println("法师");
break;
}
}
}
}子类转父类(向上转型)
所谓的转型,是指当引用类型和对象类型不一致的时候,才需要进行类型转换
类型转换有时候会成功,有时候会失败(参考基本类型的类型转换)
到底能否转换成功? 教大家一个很简单的判别办法
把右边的当做左边来用,看说得通不
Hero h = new Hero();
ADHero ad = new ADHero();
h = ad;
右边ad引用所指向的对象的类型是 物理攻击英雄
左边h引用的类型是 普通英雄
把物理攻击英雄 当做 普通英雄,说不说得通? 说得通,就可以转
所有的子类转换为父类,都是说得通的。
苹果手机 继承了 手机,把苹果手机当做普通手机使用
怡宝纯净水 继承了 饮品, 把怡宝纯净水 当做饮品来使用
父类转子类(向下转型)
父类转子类,有的时候行,有的时候不行,所以必须进行强制转换。
强制转换的意思就是 转换有风险,风险自担。
对象的转型spring要用到许多,此时暂时不接触。等需要了回头再来看。目前先理解基本的概念,实例等日后再练习。

京公网安备 11010502036488号