JavaWeb程序员

代码块与final关键字

2018-11-03  本文已影响5人  我叫吴智斌

代码块
类中或者方法当中 使用{}括起来的一段代码 就称它是一个代码块
在代码块当中定义的变量我们称是局部变量,在外面是没有办法使用的.

    {
        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修饰,说明工具方法只需要使用工具类名调用即可.
此时必须把工具类的构造器私有化.防止创建对象调用静态方法

上一篇下一篇

猜你喜欢

热点阅读