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,如下图所示,就可以正常显示出来了。