代码块与final关键字
代码块
在类中
或者方法
当中 使用{}括起来的一段代码 就称它是一个代码块
在代码块当中定义的变量我们称是局部变量,在外面是没有办法使用的.
{
int a = 10;
System.out.println(a);
}
代码当中定义的变量,我们称它是局部变量
三种代码块类型
1.局部代码块:直接定义在方法
内部的代码块 每调用方法时执行
例如:
if(){
这个也是局部代码块
}
2.初始化代码块:直接在类当中定义代码块 每创建一个对象时执行
初始化代码块在运行时,还是要把它放到构造方法当中(最前面)
public class Test {
Test() {
System.out.println("-------------");
}
{
在类中定义的代码块,会直接放到构造方法当中
int b = 10;
System.out.println("初始化代码块执行了");
}
执行结果如下:
初始化代码块执行了
-------------
public static void main(String[] args) {
Test test1 = new Test();
}
}
3.静态代码块
在初始化代码块前加上一个static
在什么时候执行:在加载字节码
时就会自动调用
在主方法之前
执行的.只执行一次
静态代码块随着字节码的加载也加载进了JVM
此时main方法还没执行,因为方法需要JVM调用
先把字节码加载进JVM,JVM再去调用main方法
用来做一次性初始化操作
public class Test {
static {
System.out.println("静态代码块执行了");
}
}
组合关系
组合关系:自己当中的字段是一个"类"类型 在自己的字段中使用其他类 依赖其他的类
class Person {
String name;
int age;
Dog pet; 组合关系:自己当中的字段是一个"类"类型 在自己的字段中使用其他类
}
class Dog {
String name;
}
public class Test {
// 一个人有一条狗
public static void main(String[] args) {
Person per = new Person();
per.name = "zs";
Dog dog = new Dog();
dog.name = "旺财";
per.pet = dog;
System.out.println(per.pet.name);//旺财
}
}
类在什么时候去加载
在使用该类对象的时候,去加载到JVM当中
只加载一次,下一次就直接从内存当中使用了
1.类的加载:当第一次创建该类对象的时候,加载到内存当中,
在加载时,会之执行static
2.字段初始化问题
2.1静态的字段初始化:是在静态代码块当中初始化
2.2非静态的字段初始化:它是在构造器当中做的初始化
3.子类构造器默认会调用父类的构造器
final关键字
只能用,不能呢修改
继承弊端
:破坏了我们的封装 它可以去访问父类当中的实现细节 可以覆盖父类当中的方法
final:"最终,不可修改的" 保证数据的安全
可以修饰
字段: 不能再去修饰该字段
方法: 子类就不能再去覆盖该方法了
类: 该类就不能再去被继承了
final关键字注意点
final 修饰字段时,是没有初始值的,必须得要自己手动
设置初始值
final 修饰变量,就代表一个常量 命名规则:所有字母都大写
MAX_VALUE
final 可以在局部代码块当中使用
如果final修饰的是基本数据类型
,代表值
不能再去修改了
如果final修饰的是一个引用数据类型
, 代表地址
不能再去修改了
设计模式
是一套被反复使用/多数人知晓的/经过分类的/代码设计经验的总结
之前很多程序员经过无数次的尝试,总结出来一套最佳实践.
单例设计模式
单例: 一个类在内存当中只有一个对象.别人不能再去创建对象了.
通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例对象
为什么要使用单例设计模式: 因为要做一个工具类
单例设计模式特点
1.单例只能有一个实例
2.单例类中必须自己创建自己的唯一实例
3.单例类必须给所有其他对象提供这一实例
单例设计模式特点
1.控制资源的使用
2.控制实例的产生数量,达到节省资源的目的
3.作为通讯媒介,数据共享
写法:
饿汉模式
1.必须的要在该类中创建一个对象出来 (制造锤子)
2.私有化自己的构造器 (锁钱箱,不许别人再买锤子,用我的就好了) 防止外界通过构造器创建新的对象
3.给外界提供一个方法,能够获取已经创建好的对象.(告诉别人锤子的位置)
class ToolUtil{
//创建私有化对象
private static ToolUtil instance = new ToolUtil();
//私有化构造器
private ToolUtil() {
}
//返回工具类地址(类方法)
public static ToolUtil getInstance() {
return instance;
}
void sort() {
System.out.println("调用了sort的方法");
}
}
public class SingleDesign{
public static void main(String[] args) {
ToolUtil.getInstance().sort();
}
}
工具类
把一些经常使用的功能,卸载一个类当中,我们称这个类就为工具类
以后使用该功能时,直接调用.
提前写好的一些常用功能
工具类经常使用的包名
工具类我们都喜欢吧它放在名字叫util/utils或tool/tools等
大家都喜欢这样干,以后看到这样的包名,要清楚里面放的都是工具类
写好了以后,可以直接拿来使用
如何设计工具类
1.工具类当中的方法我们一般都会给他设计成静态的方法,直接使用类名来调用
2.如果是一个工具类当中的方法,没有static,我们一般都把工具类设置为单例
通过单例获取对象调用工具方法
3.如果工具类全部使用static修饰,说明工具方法只需要使用工具类名调用即可.
此时必须把工具类的构造器私有化.防止创建对象调用静态方法