软件设计之Java入门视频(12)
视频教程来自B站尚硅谷:
尚硅谷Java入门视频教程,宋红康java基础视频
相关文件资料(百度网盘)
提取密码:8op3
idea 下载可以关注 软件管家 公众号
学习内容:
该视频共分为1-717部分
本次内容涉及330-359
在写代码时,总是需要来回切换界面来看代码要求,这里推荐Snipaste,可以把截图以窗口形式放在屏幕上
记录内容:
- 代码块
- final 关键字
- 抽象类与方法
- 接口
1、代码块
1)作用:用来初始化类、对象
2)代码块如果有修饰的话,只能用static
3)分类:静态代码块
与非静态代码块
静态代码块
a)内部可以有输出语句
b)随着类的加载而执行,而且只执行一次
c)静态代码块的执行要先于非静态代码块
非静态代码块
a)内部可以有输出语句
b)随着对象的创建而执行,每创建一个对象,就执行一次非静态代码块
c)作用:可以在创建对象时,对对象属性等进行初始化
由父及子,静态先行
main方法作为程序入口(static),仍遵循由父及子规定,所以先1,4,再7
然后再执行父类Person中的代码块–>构造器;
随后转到子类Animal中执行代码块–>构造器;
package test;
public class BlockTest {
}
class Person{
static {
System.out.println("1");
}
{
System.out.println("2");
}
public Person(){
super();
System.out.println("3");
}
}
class Animal extends Person{
static {
System.out.println("4");
}
{
System.out.println("5");
}
public Animal(){
super();
System.out.println("6");
}
public static void main(String[] args) {
System.out.println("7");
new Animal();
}
}
}//输出顺序1 4 7 2 3 5 6
对象赋值顺序
1)默认初始化
2)显式初始化/在代码块中赋值 [看代码先后顺序]
3)构造器中初始化
4)通过对象.属性或对象.方法赋值
5)接口
final关键字
1)final可以用来修饰的结构:类、方法、变量
2)final用来修饰类:此类不能被其他类所继承
3)final用来修饰方法:此方法不能被重写
4)final用来修饰变量:“此时的变量”
就称为一个常量
a)final修饰属性:可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中初始化
b)final修饰局部变量:修饰形参时,需要给常量形参赋一个实参,并只能在方法内使用这个不能进行赋值的形参
5)static final用来修饰属性:全局常量
package test;
public class OrderTest {
final int WIDTH = 0;
final int LEFT;
final int RIGHT;
{
LEFT = 1;
}
public OrderTest(){
RIGHT = 1;
}
public OrderTest(int m){
RIGHT = m;
}
}
抽象类与方法
抽象类
1)抽象类不能实例化
2)抽象类中一定有构造器,便于子类实例化时调用(设计:子类对象实例化全过程)
3)开发中,都会提供抽象类的子类,让子类对象实例化
抽象方法
1)抽象方法只有方法的声明,没有方法体
2)包含抽象方法的类一定是抽象类;抽象类可以不包括抽象方法
3)若子类重写了父类中的所有的抽象方法后,此子类方可实例化
4)若子类没有重写父类中所有的抽象方法,则此子类也是一个抽象类,需要使用abstract
注意点
1)abstract不能用来修饰:属性、构造器等结构
2)abstract不能用来修饰私有方法、静态方法、final的方法、final的类
静态方法与static不同用的解释
:抽象类不能直接实例化,而静态方法不依赖于实例,可以直接通过类名调用。把一个方法同时定义为abstract和static在语义上是矛盾的,因为抽象方法需要实例化的子类来实现,而静态方法在没有实例时就可以调用
抽象类的匿名子类对象
//Person是抽象类
Person p = new Person;//这是无法执行的,因为抽象类无法造对象
//如果worker是Person子类
Worker worker = new Workder(); //有类的名字;有对象名字
Person p = new Person(){ //此时匿名子类的对象p 没有子类名字;有对象名字
@Override //重写抽象方法
public void eat(){
}
}
4、接口
1)接口使用interface定义
2)Java中,类和接口是并列的两个结构
3)定义接口中的成员:
a)JDK7及以前:只能定义全局常量
(public static final书写时可省略不写
)和抽象方法
(public abstract)
b)JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法
与默认方法(略)
4)接口中不能定义构造器,意味着不能实例化
5) Java开发中,接口通过让类去实现(implements)方式使用
a)如果实现类覆盖了接口中所有的抽象方法,则此实现类可以实例化
b)如果实现类没有覆盖接口中所有的抽象方法,则该类仍为一个抽象类
6)Java类可以实现多个接口
a)格式: class AA extends BB implements CC,DD,EE
7)接口与接口之间可以继承,可多继承
package test;
public class InterfaceTest {
public static void main(String[] args) {
Fly fly = new Fly();
fly.fly();
}
}
interface Flyable{
//全局常量
public static final int MAX_SPEED = 10;
int MIN_SPEED = 0;
//抽象方法
public abstract void fly();
}
class Fly implements Flyable{
@Override
public void fly() {
System.out.println("通过引擎起飞");
}
}