包、常量、修饰符、枚举
1、包
包是用来分门别类地管理各种不同类的,类似于文件夹,建包有利于程序的管理和维护。
建包语法格式
- 公司域名倒写.技术名称
com.itheima.learn//但我习惯与只写技术名,每.一下就会产生一个包,像这样就三个包了
- 包名建议全部英文小写,且具备意义
- 建包语句必须在第一行,一般IDEA工具会帮助创建
导包
- 相同包下的类可以直接访问,不同包下的类必须导包:import 包名.类名;
- 其实一般的开发工具(如IDEA)都会帮你导好的
特别注意的是
- 如果要在这个类中使用不同包下的相同的类名,此时默认只能导入一个类的包,另一个类要使用全名(不导包,包名.类名)访问
例子:
package test1;
public class Student {
private String name;
public Student() {
}
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test2;
public class Student {
private int age;
public Student() {
}
public Student(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package test;
import test1.Student;
public class Test1 {
public static void main(String[] args) {
Student student1 = new Student("小盆友");//在使用test1包下的Student来创建对象时,会导入包
test2.Student student2 =new test2.Student(9);//编译工具不会导包,而用全类名访问
}
}
2、权限修饰符
用来控制成员能被访问的范围
打勾表示可以访问
修饰符 | 同一个类 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
---|---|---|---|---|
private | √ | |||
缺省 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
3、final修饰符
- 修饰类:表明该类是最终类,不能被继承(如工具类可以使用)
- 修饰方法:不能被重写
- 修饰变量:该变量第一次赋值后,不能再次被赋值(仅能被赋值一次)
- 修饰的变量是基本类型:那么变量存储的数据值不能发生改变
- 修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生改变的
3、常量
- 定义:使用了public static final修饰的成员变量,必须有初始化值,而且执行过程中值不能被改变
- 作用、好处:做系统的配置信息,方便程序的维护,也能提高可读性 执行原理:
- 在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量 让使用常量的程序的执行性能与直接使用字面量是一样的
观察使用常量的地方,编译后会是怎么样的(class文件内容)
Java文件
package test;
public class Test1 {
public final static int NUMBER = 100;
public static void main(String[] args) {
System.out.println(NUMBER);
System.out.println(NUMBER);
System.out.println(NUMBER);
System.out.println(NUMBER);
System.out.println(NUMBER);
System.out.println(NUMBER);
}
}
out文件夹下的Test1.class
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package test;
public class Test1 {
public static final int NUMBER = 100;
public Test1() {
}
public static void main(String[] args) {
System.out.println(100);//全换成了字面量
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
}
}
常量做信息标志和分类
代码可读性好,实现了软编码方式
4、枚举
Java中一种特殊类型,为了做信息的标志和分类
定义格式:
修饰符 enum 枚举名称{
第一行都是罗列枚举实例的名称
}
switch已经兼容了枚举,不需要点出来
package learning;
public enum Season{
SPRING,SUMMER,AUTUMN,WINTER;//四个对象
}
package learning;
public class EnumTest {
public static void main(String[] args) {
feel(Season.SPRING);//这里要用类点出来
feel(Season.SUMMER);
feel(Season.AUTUMN);
feel(Season.WINTER);
}
public static void feel(Season season){
switch (season){
case SPRING:
System.out.println("春天来了!!!");
break;
case SUMMER:
System.out.println("夏天来了!!!");
break;
case AUTUMN:
System.out.println("秋天来了!!!");
break;
case WINTER:
System.out.println("冬天来了!!!");
break;
}
}
}
使得代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术
待续~~~~