1、包
包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。建包语句必须在第一行,一般 IDEA 工具会帮助创建
假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。
com.itheima.d1_package.demo2.Cat c2 = new com.itheima.d1_package.demo2.Cat();
2、权限修饰符
权限修饰符:是用来控制一个成员能够被访问的范围的。可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。
权限修饰符的分类和具体作用范围:
有四种作用范围由小到大(private -> 缺省 -> protected - > public )
自己定义成员(方法,成员变量,构造器等)一般满足如下要求:
成员变量一般私有。
方法一般公开。
如果该成员只希望本类访问,使用private修饰。
如果该成员只希望本类,同一个包下的其他类和子类访问,使用protected修饰。
3、 final关键字
final的作用
final 关键字是最终的意思,可以修饰(方法,变量,类)修饰方法:表明该方法是最终方法,不能被重写。修饰变量:表示该变量第一次赋值后,不能再次被赋值( 有且仅能被赋值一次 ) 。修饰类:表明该类是最终类,不能被继承。/** 目标:明白final一些基本语法知识 */ public class Test { // 属于类,只加载一次,可以共享 (常量) public static final String schoolName = "黑马"; public static final String schoolName2; static{ schoolName2 = "传智"; // schoolName2 = "传智"; // 第二次赋值,报错了! } // 属于对象的! (final基本上不会用来修饰实例成员变量,没有意义!) private final String name = "王麻子"; public static void main(String[] args) { // final修饰变量,变量有且仅能被赋值一次。 /* 变量有几种: 局部变量。 成员变量。 -- 1、静态成员变量。 -- 2、实例成员变量。 */ final int age; age = 12; // age = 20; // 第二次赋值,报错了! System.out.println(age); final double rate = 3.14; buy(0.8); // schoolName = "传智"; // 第二次赋值,报错了! Test t = new Test(); // t.name = "麻子"; // 第二次赋值,报错了! System.out.println(t.name); } public static void buy(final double z){ // z = 0.1; // 第二次赋值,报错了! } } /** final修饰类 类不能被继承了 */ //final class Animal{ //} //class Cat extends Animal{ //} /** final修饰方法,方法不能被重写 */ class Animal{ public final void run(){ System.out.println("动物可以跑~~"); } } class Tiger extends Animal{ // @Override // public void run() { // System.out.println("老虎跑的贼快~~~"); // } }
final修饰变量的注意
final 修饰的变量是基本类型:那么变量存储的 数据值 不能发生改变。final 修饰的变量是引用类型:那么变量存储的 地址值 不能发生改变,但是地址指向的对象内容是可以发生变化的。public class Test2 { public static void main(String[] args) { // final修饰变量的注意事项: // 1、final修饰基本类型变量,其数据不能再改变 final double rate = 3.14; // rate = 3.15; // 第二次赋值,报错 // 2、final修饰引用数据类型的变量,变量中存储的地址不能被改变,但是地址指向的对象内容可以改变。 final int[] arr = {10, 20, 30}; System.out.println(arr); // arr = null; // 属于第二次赋值,arr中的地址不能被改变 arr[1] = 200; System.out.println(arr); System.out.println(arr[1]); } }
4、常量
常量是使用了 public static final 修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。常量的作用和好处:可以用于做系统的配置信息,方便程序的维护,同时也能提高可读性。
常量命名规范:英文单词全部大写,多个单词下划线连接起来。
/** 目标:学会常量的使用,并理解常量。 */ public class ConstantDemo1 { public static final String SCHOOL_NAME = "传智集团"; public static final String USER_NAME = "admin"; public static final String PASS_WORD = "123456"; public static void main(String[] args) { System.out.println(SCHOOL_NAME); System.out.println(SCHOOL_NAME); System.out.println(SCHOOL_NAME); System.out.println(SCHOOL_NAME); System.out.println(SCHOOL_NAME); System.out.println(SCHOOL_NAME); if(USER_NAME.equals("")){ } } }
执行原理
在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量。
这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的。
常量做信息标志和分类
案例说明:
现在开发的超级玛丽游戏需要接收用户输入的四个方向的信号(上下左右),以便控制玛丽移动的方向。import javax.swing.*; import java.awt.event.ActionEvent; /** 目标: 常量的其他作用,做信息标志和信息分类(其实也是一种配置形式) */ public class ConstantDemo2 { public static final int UP = 1; // 上 public static final int DOWN = 2; // 上 public static final int LEFT = 3; // 左 public static final int RIGHT = 4; // 右 public static void main(String[] args) { // 1、创建一个窗口对象(桌子) JFrame win = new JFrame(); // 2、创建一个面板对象(桌布) JPanel panel = new JPanel(); // 3、把桌布垫在桌子上 win.add(panel); // 4、创建四个按钮对象 JButton btn1 = new JButton("上"); JButton btn2 = new JButton("下"); JButton btn3 = new JButton("左"); JButton btn4 = new JButton("右"); // 5、把按钮对象添加到桌布上去 panel.add(btn1); panel.add(btn2); panel.add(btn3); panel.add(btn4); // 6、显示窗口 win.setLocationRelativeTo(null); win.setSize(300,400