1、 e, this 关键字 在前面几天我们也简单的接触了this关召堡厥熠键字,当我们使用该关键字是用来区分成员变量 和局部变量,this这个关键字他是代表自己本身,在哪里类里面写了该关键字,那么该 this则代表那个类;this不光可以区分成员变量和=局部变量,他还可以在 自己的构造方法里面去调用自己的重载构造方法,this在调用自己重载的构造方法该调用 代码必须写在 第一行!!!!!! 不写第一行编译不通过 使用this关键字来调用构造方法一般都是在无参构造方法中调用有参构造方法来对该对象 做一些默认值的初始化操作。 1.super 他 可以用来区分子类和父类具有相同变量名的,可以用super来区分 super也可以调用父类被重写的方法 构造方法是不能够被继承的,如果想使用父类的构造方法来帮助我们完成一些事情 我们可以通过super来调用相应的构造方法,每个构造方法上面其实都有一句super() 不写也有,简单来说,在构建子类对象的时候,子类会先调用父类的构造方法 如果父类中添加了有参构造器,但是也没有手动添加无参构造器 那么子类的构造器就会报错,引用子类中的每一个构造器都会默认 调用父类的无参构造器,除非你通过super关键字来进行显示的调用 父类的相应的有参构造器; super关键字在子类的构造器中调用相应的构造器,那么也必须写在第一行 this 和 super 能同时存在吗? 不能
2、 向上造型 简单来说就难受使用 父类的引用指向子类的对象 动物 animal = new 狗();狗是动物 Animal a = new Dog(); 在使用向上造型时需要注意: ***************** 编译期和运行期 编译期看类型 Animal a= new Cat(); 在编译期这个a是动物,动物只能吃不会抓老鼠,所以a是不能够直接调用抓老鼠的 需要我们强行转换 运行期 看对象 Animal cat=new Cat(); Dog dog=(dog) cat; 上面代码只能够在编译期没有问题,因为编译期看类型dog看做了狗类型 可以调用看大门,但是运行期看对象,实际上这只狗看门的时候发现他不是一条真正的狗 而是一直披着狗皮的猫,所以他看大门的时候出错了。 ***************************** 强制转换有风险,所以强制转换之前最好要判断一下 判断该引用指向的对象是否是转换之后的对象 如何判断?java给我们提供了一个instanceof 关键字,我们可以使用该关键字 来进行判断,查看引用所指向的对象是不是我们想转的类型,如果是 则返回true 不是则返回false。。
3、勃谧锵疙访问修饰符java一共给我们提供了4种访问修饰符 private protected 默认 private 本类 ok ok ok ok 同包类 ok ok ok 子类 ok ok 其他类 ok protected 默认 的一般用的不多,常用的也就public private 2. final关键字 最终的,所以final 修饰的变量就是常量 修饰的类就不能有子类,他修饰的方法不能被重写。 a,fianl 修饰变量 1.修饰局部变量 只要在第一次使用之前赋值就可以了;而且只能赋值一次; 2.修饰成员变量 如果final修饰成员变量那么定义该成员变量的时候就必须进行赋值操作,如果 不在定义的时候进行赋值操作,那么就必须要在构造器中进行一个初始化; 如果在定义的时候已经初始化了,那么在构造器中进行初始化,程序就会编译不通过。 b, final 修饰类 如果将final修饰放在类的修饰符上面,那么该类就不能够再被继承了 使用final修饰类是不想让别人继承我这个类将我这个改的乱七八糟,而类 的修饰里面还有一个修饰符叫abstract 使用该修饰符来修饰一个类,那么该类就会变成一个抽象 类,抽象类的目的就是为了让被人继承我这个抽象类然后来重写抽象方法,而final是不让别人继承 所以这个2个关键字不能够同时修饰一个类 c, final修饰方法 如果使用该关键字来修饰方法,那么该方法就 不能够被重写。
4、static 共享数据,只有一份;还有一种特殊的调用方法,可以使用类名.变量名, 可以不通过对象的医用来进行操作。 静态的,static可以修饰变量和方法 ststic 修饰的属性不属于对象,存储在方法区中,只保留一份 而且会随着类的加载而出现在方法区里面,他不是随着对象的创建才有的; 使用static修饰的变量和方法都可以直接使用 类名.方法 调用; a,修饰变量 如果使用static修饰的变量,那么该变量就会是一个共享数据 只有一份。 b, 修饰方法 static修饰方法,该方法就称之为静态方法,静态方法有一些语法需要注意: 1.可以使用 类名.方法名 直接调用 2.静态方法中不能出现非静态方法 3.静态方法中不能出现非静态成员变量 c,为什么静态方法中不能调用非静态 因为程序运行的时候会先在方法区中加载 .class文件,加载静态资源,加载类的普通方法(所有的方法都只有一份),加载静态方法,而普通方法他是属于对象,他刚开始在方法区中是一个以“睡眠”状态存储在方法区中,当堆中创建了对象,而且该对象也调用了该方法,那么该方法才会活起来,为什么不能再静态方法中调用非静态呢?是因为当有静态方法的时候不一定有非静态方法所以为了规避这种风险,语法上面就给我们定死了。
5、 代码块 a,构造代码块 {} 在每次创建对象的时候执行一次 b,静态代码块 static{} 在类加载到虚拟机的时候执行一次,不管创建多少对象,也只执行一次; 代码块的执行顺序 静态----main----构造代码块----构造方法 其中构造代码块和构造方法在没创建一次对象的时候执行一次 而静态代码块只执行一次,所以静态代码块适合做一些加载资源的代码(加载音频,视频,图像) 重点掌握 静态代码块 执行效率最高,只执行一次。 5. 定时器他可以定时的执行某一段的代码比如一个需求,每隔1S 控制台输出HelloWorld!java官方给我们提供了一个定时类TimerTask,该类在java.util包下面,该类也是一个抽象类我们可以编写一个类来继承该提供的类,在自己重写定时器的方法。 使用特殊的方法来完成定时器功能(匿名内部类) 抽象类不能初始化,但是抽象类也有构造方法,抽象类的构造方法是为子类准备的
6、接口java中的接口是为了弥补java单继承的特性,因为java中的类只能单继承,接口和接口之间可以多继承,一个类也可以实现多个接口接口还有一个功能,是用来解耦合的接口之间可以存在多继承,中间以 , 隔开一个类可以实现多个接口 接口中的抽象方法public abstract 可以省略对于接口 我们 可以这样 理解 :接口 是一个特殊的抽象类,接口中的所有访问修饰符都是public,接口中的所有方法都是抽象方法,接口中的所有成员变量都是常量,接口不能 new ,接口也没有构造方法。
7、a,如何定义以个接口?定义接口的关键字 interface b,如何实现一个接口 实现接口的关键字 implements c,接口中的所有方法都是抽象方法 接口中的public abstract 可以直接省略 d, 接口中的所有变量都是常量 public static final int a=10; 因为接口不能创建对象,静态可以直接使用 接口名.常量名 直接用 所有接口中的常量public static final 也可以全部省略 int a=10; 在接口中随便少写哪一个系统都会给你自动补全的。 int a=10;