java回顾和leetcode刷题(二)

1、IDEA中数据库没有连接成功的,报如下错误 Server returns invalid timezone. Go to ‘Advanced’ tab and set 'serverTimezon

解决方法:
(1)、第二步 打开cmd,进入到mysql安装目录下的bin目录,我的安装目录如下:

C:\Program Files\MySQL\MySQL Server 5.7\bin

(2)、第二步:输入mysql -hlocalhost -uroot -p
(3)、第三步:输入mysql的数据库连接密码
(4)、进行mysql后,输入 set global time_zone=’+8:00’;
(5)、解决问题在这里插入图片描述

2、IDEA单元测试 ——Test class should have exactly one public constructor

错误原因: 在Junit测试类中必须声明一个public 构造函数。我的测试类没有声明public,默认为default
**解决方法:**构建一个公有构造函数即可,加上一个public

@RunWith(SpringRunner.class)
@SpringBootTest
public class MallApplicationTests {

    @Resource
    CategoryDao categoryDao;

    @Test
    public void contextLoads() {
        Category category = categoryDao.findByCategoryId(100001);
        System.out.println(category.toString());
    }
}

3、设计模式

在这里插入图片描述

3.1 单例模式

要点:
1、某个类只能有一个实例
2、必须自行创建实例
3、必须自行向整个系统提供这个实例

实现:
1、只提供私有的构造方法
2、含有一个该类的静态私有对象
3、提供一个静态的公有方法用于创建、获取静态私有对象

实现的方式:

  • **饿汉式:**对象创建过程中实例化
  • **懒汉式:**静态公有方法中实例化
3.1.1 饿汉式

1、创建私有的构造
2、创建私有的静态的实例化对象
3、创建公有的静态方法返回静态实例对象

package com.hws.singleton;

//饿汉式,创建对象实例时直接实例化,用空间换时间
public class SingletonOne {
	
	//1、创建类的私有构造
	private SingletonOne() {
		
	}
	
	//2、创建该类型的私有静态实例
	private static SingletonOne instance = new SingletonOne();
	
	//3、创建公有静态方法返回静态实例对象
	public static SingletonOne getInstance() {
		return instance;
	}

}

3.1.2 懒汉式

1、创建私有的构造
2、创建私有的静态的,不用实例化,直接赋值为null即可
3、创建公有的静态的实例化方法,里面先判断是不是为空,若为空的话,给它new SinletonTwo 一下,然后再返回instance

package com.hws.singleton;

//懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作
//用时间换空间
public class SingletonTwo {
	
	//1、创建一个私有的构造方法
	private SingletonTwo() {
		
	}
	
	//2、创建一个私有静态的实例化
	private static SingletonTwo instance2 = null;
	
	//3、创建开放的静态方法提供实例对象
	public static SingletonTwo getInstance() {
		if(instance2 == null) {
			instance2 = new SingletonTwo();
		}
		return instance2;
	}
}
3.1.3 饿汉式和懒汉式的比较

1、饿汉式线程相对安全
2、懒汉式存在线程安全风险(同步锁、双重校验锁、静态内部类、枚举来解决)

3.2 单例模式的使用场景

使用场景
1、创建对象时占用资源过多,但同时又需要用到该类对象
2、对系统内资源要求统一读写,如读写配置信息
3、当多个实例存在可能引起程序逻辑错误,如号码生成器

4、多态

1、可以分为编译时多态方法重载)和运行时多态
2、编译时多态:设计时多态方法重载
3、运行时多态(java中):程序运行时动态决定调用哪个方法

4.1 多态的实现

4.1.1 向上转型(隐式转型,自动转型)

我这里自己定义了一个动物的父类Animals,加了name,month这两个属性和eat() 这个方法
子类有2个,分别是Cat和Dog,
Cat中重写(Override)了父类的eat方法,加了个体重weight的属性
Dog中也重写(Override)了父类的eat方法,加了个性别sex属性
在这里插入图片描述
图中第二个Animal是 父类引用指向子类实例(小类转型为大型),也称作 向上转型、隐式转型、自动转型
父类引用指向子类的实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有的方法

4.1.2 向下转型

在这里插入图片描述
在这里插入图片描述

  • 注意要满足条件才能进行强转,比如上面的cat1可以变成Cat类型的,是因为之前自己已经有这么一句代码 Animal animal2 = new Cat(); 所以才可以强制转为Cat,(如果强转为Animals会报错,因为没有满足new 的那个条件)

那有没有可以验证一下是否满足强转条件的呢?
instanceof,左侧的对象是否满足右边类型的。 它如果满足的话,返回true,不满足的话,返回false,如下图所示,就可以正常显示出来了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐形的稻草人HWS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值