学习记录18包、final、权限修饰符、代码块

什么是包?
包就是文件夹。来管理各种不同功能的java类,方便后期代码的维护。

  • 包的命名规则:公司域名反写+包的作用,需要全部英文小写,见名知意
    eg:com.itheima.domain 域名里的www不要了,换成包的功能名domain。
    包里面有很多类,另外的包里可能有相同的类名,所以为了区分,有一个全类名(全限定名):com.itheima.domain.Student(包名加类名)

    比如,在Test类中想要创建一个Student类的对象,而这个Student类是其他包当中的,那么声明方法就是:com.itheima.domain.Student student = new com.itheima.domain.Student()

导包规则:
上述代码有些繁琐,为了解决这一问题(适用于这个包中在没有同名的类),所以有了关键字import,在最上面的区域用import com.itheima.domain.Student语句,将这个外包中的类导入,就可以直接声明Student student = new Student()
上述情况使用全限定名他。“导包”的使用场景:

  • 使用同一个包中的类时,不需要导包
    使用java.lang包中的类时,不用导包(这个包是java的核心包,String类就在这个包下)
    其他情况都需要导包
    如果同时使用两个包中相同类名的类,需要写全限定名

final关键字

最终的——不可被改变的
用于修饰1.方法;2.类;3.变量
方法被final修饰时:表示该方法是最终方法,不能被子类重写
类被final修饰时:表示该类是最终类,不能被继承
变量被final修饰时:表示该变量就做常量,一旦被赋值就不能再被改变

常量:实际开发当中,常量一般用于作为系统的配置信息,为了方便维护,提高可读性
命名规范:
1.单个单词:全部大写
2.多个单词:全部大写,单词之间用下划线隔开

细节:
当final所修饰的变量是基本数据类型时:那么变量存储的数据值不能发生改变
当final所修饰的变量是引用类型时:那么变量存储的地址值是不能发生改变的,但对象内部的属性值还是可以修改的

final是为了维护便于代码的维护,这就需要,程序员在接手外人的代码时,可以在不读完整代码的情况下,大致的了解到每一个值的作用,例如,学生信息管理系统中的switch语句,case后面跟的是数字,这就很难明白每个数字所代表的具体操作是什么,所以最好使用变量名来表明其功能,但这个值是定死的,定死的意思是,这个值就是对应某个功能,再不变了,所以这个时候,用常量是最好的。

权限修饰符

  • 权限修饰符:是用来控制一个成员能够被访问的范围的
  • 可以修饰成员变量、方法、构造方法、内部类
    权限修饰符的分类:
    private<(空着不写、缺省/默认)<protectede<public,被他们修饰过后,被修饰的对象可以被使用的范围

privat:只能本类自己用
默认:只能在本包当中使用(包以外的都不能用,不管是不是这个包类中的子类)
protected:受保护的。在默认的基础上,增加了这个包中的子类可以使用
public:公共的

  • privat:只能本类自己用(在本类中调用)

    在其它类当中调用就报错
  • 默认:只能在本包当中使用(包以外的都不能用,不管是不是这个包类中的子类)

    在其他包中的子类当中是不能调用的
  • protected:受保护的。在默认的基础上,增加了这个包中的子类可以使用

代码块

1.局部代码块

这里的局部对应的意思是方法,所以局部代码块就是“写在方法里面的代码”。
作用:提前结束变量的声明周期,节约内存

2.构造代码块

就是将有参无参构造器当中重复的代码抽取出来,放到构造器外面(即,写在成员位置),就成为构造代码块,优先于构造方法执行
作用:可以把多个构造方法中重复的代码抽取出来(灵活性太差)
执行时机:优先于构造方法执行
有时出现多个方法中语句相同,但又不是全部的方法都相同,那么可以用以下两个方式解决

3.静态代码块

格式:static{}(在代码块前面加上static关键字)
特点:需要用static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
使用场景:在类加载的时候,做一些数据初始化的时候使用。写在主方法外部(前面提到了,是成员位置)
在主方法中,也可以完成数据的初始化,然而这样的初始化时有弊端的,比如,主方法或所在类被调用多次,那么就会出现多次“添加初始化数据”这个行为,学生信息管理系统,创建的列表,每次都会进行添加初始化数据的操作。造成一定的空间浪费以及时间损耗,所以为了避免这个问题,就用static初始化的方法
而static节省内存的关键就在于它是与类同时加载的

分析:main方法会被多次调用,每次调用,我都用新的集合,造成了空间的浪费,而在成员位置创建集合(用static初始化),每次调用main方法用的都是同一个集合;而且static对数据的初始化,是随着类加载的,也就是说,调用了main方法后,不管结束没结束,这个初始化已经进行了,并且只要程序不结束,数据就一直存在,不用像以前一样,每次调用main方法后都需要进行设定好的数据初始化。被调用的main方法结束后,被添加的数据不会消失。

posted @ 2022-10-21 13:14  BattleTrumpet  阅读(30)  评论(0)    收藏  举报