/* 包 包一般都是自动导,可以在SETTING里搜索AUTO来设置,自动 同名的只能搞一个,比如一个包里有student,另一个包里也有student,现在在一个类里两个都要用,这时候只能导一个,第二个要用包名.类名来访问 */ /* 权限修饰符 private本类 缺省 本类+同一个包访问 protected 本类+同一个包+子类 public 随便访问 */ /* final最终 修饰类,方法,变量,只要用final修饰了,就不能有子类,被重写,被修改 比如修饰类 final class Animal{} 那么Animal就不能被继承,用于工具类 修饰方法 public final void f(){} 修饰变量 final int a = 5; final修饰基本类型时,让数据不能改变 final修饰引用类型时,让指向的地址值不能改变,但是地址值指向的东西实际是可以改变的 */ /* 变量 有两种,局部变量和成员变量 方法里随便搞的变量就是局部变量,比如方法里定义int a = 2; a是局部变量 成员变量是类里面的,有两种,一种是静态成员变量,一种是实例成员变量 静态比如在线人数,public static int onlinenumber = 100; 实例比如student类里面具体一个学生叫什么名 如果用final修饰局部变量和静态成员变量,可以避免数据被更改 如果用final修饰实例成员变量就没什么意义了,比如修饰name,那么每个学生都会是同一个名字而且无法更改 */ /* 常量 命名方式:SCHOOL_NAME 所有字母全大写,下划线链接 用常量主要为了方便维护提高可读性,比如学校名称如果更改,要修改很多地方.如果用常量,直接修改常量的值就行 public static final String SCHOOL_NAME = "学校" 必须给他赋值,因为后面改不了了,不赋值永远没有值了 */ /* enum枚举 枚举可以提高代码可读性和规范性,避免出现问题. 比如设计游戏让人物移动,这时我们有4个方向,上下左右,这是全部的可选项,此时可以定义一个enum public enum move(){ UP,DOWN,LEFT,RIGHT } 此时别人再设计方法让他移动的时候,入参就传一个enum进去 public static void move(move m){ 直接用switch来枚举这几种情况就行,要用switch才有意义.可以避免瞎写或者意义不明 switch(m){ case UP case DOWN case LEFT case RIGHT } } */ /* 抽象类 建的时候写abstract class,里面可以写抽象方法,方法不能写方法体. 抽象类就是一个不完整的设计图,让子类去继承,然后子类重写那个方法,实际上是约束子类必须重写这个功能. 其他功能跟别的类没啥区别 如果有抽象方法,这个类必须定义成抽象类 alt+enter快速重写所有 抽象类是不能创建对象的,因为里面方法方法体都没有 和final是相反的 */ /* 模板方法模式 定义一个抽象类,里面可以写好一些方法,再写一些抽象方法. 必须写作文,作文开头结尾都是一样的,可以直接把方法定义好,用final定义更好 中间部分就定义一个抽象方法 */ /* 接口 接口是一种设计模式,里面只能写抽象方法和常量. 因为接口是一种规范思想,规范一定会公开,所以public static final abstract都可以不写 ( public static final )String SCHOOL_NAME = "黑马"; ( public abstract ) void eat(); interface可以被多实现implement 一个类实现接口,必须重写所有接口里需要重写的抽象方法,否则必须定义为抽象类 接口可以继承接口,比如一个类要继承3个接口,那一个一个写很麻烦,可以先让一个接口继承俩,然后再让类继承那一个即可 JDK8以后,为了更新接口,系统改版升级了,里面也可以写带有方法体的方法了. 更新以前因为接口里只能定义抽象方法,如果要加个功能,每个实现这个接口的类都要重写这个方法,太麻烦了 但是要求是用 default修饰, default void run(){}; 直接就可以用,如果冲突的话需要继承的类重写 如果要定义静态方法,那就直接定义 static void run(){}; 但是这个方法必须要用接口点上方法名来调用,属实没必要 还可以定义private方法,只能在接口类那个文件内部自己调,没什么用 */
9.6号笔记
最新推荐文章于 2024-07-19 17:37:28 发布