包,final,权限修饰符,代码块(java)

本文详细介绍了Java中的包概念、final关键字的用途、权限修饰符的使用规则及代码块的作用等内容,帮助读者深入理解这些核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

包,final,权限修饰符,代码块(Java笔记)

什么是

包就是文件夹,用来管理不同功能的lava类,方便后期代码维护

  • 包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意
package com.itheima.domain//黑马的包名

package表示包,后面再跟着的就是包名

package com。itheima。domain
public class Student{
    私有化成员变量
    构造方法
    成员方法
}

在使用一个类的时候,是把包名也加上的,因为在很多包中,会有相同名字的类,如果只写类名,会辨别不出来来自于那个包中,只有加上包名才能是唯一的。

此时,像com.itheima.domain.Student这种包名加类名称为全类名,或者叫做全限定名,可以理解为类真正的名字

  • 使用其他类的规则:使用其他类时,需要使用全类名
public class Teat{
    public static void main(String[] args){
        com.itheima.domain.Student s = new com.itheima.Student();
    }
}

这种完全写起来过于麻烦,于是有了导包(import)

import com.itheima.domain.Student;
public class Teat{
    public static void main(String[] args){
        Student s = new Student();
    }
}

导包不是所有情况都可以直接导包的,有一定的规则

  1. 使用同一个包中的类别时,不需要导包

    Java会默认到本包中找

  2. 使用java.lang包中的类时,不需要导包

    java.lang的包属于Java的核心包,可以直接使用。String类就属于java,lang

  3. 其他情况都需要导包

  4. 如果同时使用两个包中的同名类,需要用全类名

  • 总结

    1. 包的作用

      包就是文件夹,用来管理各种不同功能的Java类,不同功能的类放到不同的包中

    2. 包名书写的规则

      公司域名的反写+包的作用,需要全部英文大小写,见名知意

    3. 什么是全类名

      包名+类名

    4. 什么时候需要导包?什么时候不需要导包?

      • 使用同一个包中的类别时,不需要导包
      • 使用java.lang包中的类时,不需要导包
      • 其他情况都需要导包
      • 如果同时使用两个包中的同名类,需要用全类名

final

final,表示是最终的,在代码中表示是不可被改变的,可以修饰方法,类,变量。

  • 修饰方法表示该方法是最终方法,不能被重写
  • 修饰类表示该类是最终类,不能被继承
  • 修饰变量时叫做常量只能被手动赋值一次

当方法表示一种规则,不希望别人去改变的时候,就可以用final来修饰

当类中的所有方法都不希望被别人重写的时候,就可以用final来修饰

常量:实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性

  • 常量的命名规则
    1. 单个单词:全部大写
    2. 多个单词:全部大写,单词之间用下划线隔开

final修饰的变量时基本类型,那么变量存储的数据值不能发生改变

final修饰的变量是引用类型,那么变量存储的地址值不能发生改变,对象内部属性值的可以改变

引用类型里面存储的是地址值,根据地址值找属性值

总结

  1. final修饰方法:最终方法,不能被重写

  2. final修饰类:最终类,不能被继承

  3. final修饰变量:是常量,不能被修改

    基本数据类型:变量的值不能被修改

    引用数据类型:地址符不能修改,内部的属性值可以修改

权限修饰符

权限修饰符:是用来控制一个成员能够被访问的范围的

可以修饰成员变量,方法,构造方法,内部类

  • 权限修饰符的分类:有四种作用范围的由小到大(private<空着不写<protected<public
修饰符同一个类中同一个包中其他类不同包下的子类不同包下的无关类
private
空着不写
protected
public
  • 权限修饰符的使用规则:实际开发中,一般只用privatepublic
    1. 成员变量私有
    2. 方法公开
    3. 特例:如果方法中的代码是抽取其他方法中的共性代码,这个方法一般也私有

代码块

  1. 局部代码块

    public static CodeBlockDemo1{
        {
            int a = 10;
        }
        System.out.println(a);
    }
    

    变量a就是在一个局部代码块中,局部代码块运行结束直接清除,所有输出会报错

  2. 构造代码块

    构造代码块就是写在成员位置的代码块,优先于构造方法执行

    作用:可以把多个构造方法中重复的代码抽取出来

    执行时机:在创建本类对象的时候会先执行构造代码块

    代码解释:

    public class Student{
        private String name;
        private int age;
        
        public Student(){
            System.out,println("开始创建对象");
        }
        
        public Student(String name,int age){
            System.out,println("开始创建对象");
            this.name = name;
            this,age = age;
        }
        
        public String getName(){
            return name;
        }
        
        ……
    }
    

    这个代码的两个构造方法中都有输出语句System.out,println("开始创建对象");,此时的输出语句可以单独提出,形成构造代码块。

    public class Student{
        private String name;
        private int age;
        
        {
            System.out,println("开始创建对象");
        }
        
        public Student(){
        }
        
        public Student(String name,int age){
            this.name = name;
            this,age = age;
        }
        
        public String getName(){
            return name;
        }
        
        ……
    }
    

在这里插入图片描述

这种写法不是十分灵活,当有三个构造方法并且只有前两个需要有相同的代码的时候,这种写法就没法顾全,此时可以进行一些优化

public class Student{
    private String name;
    private int age;
    
    public Student(){
        this(null,0);
    }
    
    public Student(String name,int age){
        System.out,println("开始创建对象");
        this.name = name;
        this,age = age;
    }
    
    public String getName(){
        return name;
    }
    
    ……
}

此时无参构造里面的this指向有参构造,意思是调用了其他构造。

还有一种办法就是直接将共同的写成方法,需要的直接调用

  1. 静态代码块

    格式:static{}

    特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次

    使用场景:在类加载的时候,做一些数据初始化的时候使用。

    静态代码块初始化比在方法中初始化要相对安全,因为方法的初始化是公共的,有可能被反复调用

在这里插入图片描述

通过这图可以发现,静态代码块并没有跟构造代码块一样,静态代码块只是执行了一次

总结

  1. 代码块的分类

    局部代码块,构造代码块,静态代码块

  2. 局部代码块的作用

    提前结束变量的生命周期(基本淘汰)

  3. 构造代码块的作用

    抽取构造方法中的重复代码(不够灵活)

  4. 静态代码块的作用

    数据的初始化(重点)
    法中初始化要相对安全,因为方法的初始化是公共的,有可能被反复调用

[外链图片转存中…(img-wXvcds7r-1672233861278)]

通过这图可以发现,静态代码块并没有跟构造代码块一样,静态代码块只是执行了一次

总结

  1. 代码块的分类

    局部代码块,构造代码块,静态代码块

  2. 局部代码块的作用

    提前结束变量的生命周期(基本淘汰)

  3. 构造代码块的作用

    抽取构造方法中的重复代码(不够灵活)

  4. 静态代码块的作用

    数据的初始化(重点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

都不会的鲨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值