❤写在前面
❤博客主页:努力的小鳴人
❤系列专栏:JavaSE超详总结😋
❤欢迎小伙伴们,点赞👍关注🔎收藏🍔一起学习!
❤如有错误的地方,还请小伙伴们指正!🌹
🔥系列传送门:
【04章Java面向对象编程(中)】解密 继承性和多态性【热榜】
【04章Java面向对象编程(上)】万事万物皆对象的初体验【全站热榜第二】
【附章1Java数组中常见算法】图文并茂详解十大排序算法让您回味无穷
【03章Java数组】程序员必看数组详解
【02章Java基本语法】详细讲解让你重新认识Java基本语法和流程流程控制
【01章Java语言概述】Java学了很久了吧,快回来熟悉熟悉吧(详细)
文章目录
一、分析main方法
分析:因Java虚拟机需调用main()方法
,所以该方法的访问权限必须是public,又因为Java虚拟机在执行main()方法时不需要创建对象
,所以该方法必须是static的,该方法接收String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数因为main() 方法是静态的
我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员
二、代码块
类的成员
- 作用:对Java类或对象进行初始化
- 分类:
●静态代码块:一个类中代码块若有修饰符,则只能被static修饰
●非静态代码块:没有使用static修饰的
1)static代码块通常用于初始化static的属性
👌静态代码块
- 可以有输出语句
- 可以对类的属性、类的声明进行初始化操作
- 不可以调用非静态的属性和方法
- 若有多个静态的代码块,那么按照
从上到下
的顺序依次执行 - 静态代码块的执行要先于非静态代码块
- 静态代码块随着类的加载而加载,且只执行一次
👌非静态代码块
- 可以有输出语句
- 可以对类的属性、类的声明进行初始化操作
- 除了调用非静态的结构外,还可以调用静态的变量或方法
- 若有多个非静态的代码块,那么按照
从上到下
的顺序依次执行 - 每次创建对象的时候,都会执行一次,且先于构造器执行
三、抽象类与抽象方法
抽象类:用abstract关键字来修饰一个类
抽象方法:●用abstract来修饰一个方法;
●只有方法的声明,没有方法的实现。以分号结束,比如:public abstract void talk();
- ●不能用abstract修饰变量、代码块、构造器;
●不能用abstract修饰私有方法、静态方法、final的方法、final的类 抽象类不能被实例化,抽象类是用来被继承的
,抽象类的子类必须重写父类的抽象方法,并提供方法体- 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
- 抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类
- 举例:Vehicle是一个抽象类,有两个抽象方法:
public abstract class Vehicle{
public abstract double calcFuelEfficiency(); //计算燃料效率的抽象方法
public abstract double calcTripDistance(); //计算行驶距离的抽象方法
}
public class Truck extends Vehicle{
public double calcFuelEfficiency( ) { //写出计算卡车的燃料效率的具体方法 }
public double calcTripDistance( ) { //写出计算卡车行驶距离的具体方法 }
}
public class RiverBarge extends Vehicle{
public double calcFuelEfficiency( ) { //写出计算驳船的燃料效率的具体方法 }
public double calcTripDistance( ) { //写出计算驳船行驶距离的具体方法}
}
🎁注:含有抽象方法的类必须被声明为抽象类
四、接口
interface
○有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多重继承,有了接口,就可以得到多重继承的效果
○有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系,仅仅是具有相同的行为特征而已
接口的本质是契约,标准,规范
- 格式:
先写extends后写implements
;class SubClass extends SuperClass implements InterfaceA{ } - 一个类可以实现多个接口,接口也可以继承其它接口
- 主要用途:被实现类实现;[面向接口编程]
👌接口和抽象类之间的对比
👌接口中的默认方法
- 接口冲突:若一个接口中定义了一个默认方法,而另外一个接口中也定义了一个同名同参数的方法(不管此方法是否是默认方法),在实现类同时实现了这两个接口时
- 类优先原则:若一个接口中定义了一个默认方法,而父类中也定义了一个同名同参数的非抽象方法,则不会出现冲突问题
五、内部类
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类
- 分类:
●成员内部类(static成员内部类和非static成员内部类)
●局部内部类(不谈修饰符)、匿名内部类 - 声明:
class 外部类{
方法(){
class 局部内部类{
}
}
{
class 局部内部类{
}
}
} - 内部类特点:
●内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号,以及数字编号。
●只能在声明它的方法或代码块中使用,而且是先声明后使用。除此之外的任何地方都不能使用该类
●局部内部类可以使用外部类的成员,包括私有的
●可以使用外部方法的局部变量,但必须是final的
●不能使用public,protected,缺省,private,不能使用static修饰,不能包含静态成员
成员内部类作为类的成员的角色:
可以声明为private或protected、可以调用外部类的结构、可以声明为static的,但此时就不能再使用外层类的非static的成员变量
作为类的角色:
可以声明为final、可以在内部定义属性、方法、构造器等结构、可以声明为abstract类 、可以被其它的内部类继承
👌匿名内部类
- 格式:
new 父类构造器(实参列表)|实现接口(){
//匿名内部类的类体部分
} - 特点:
●匿名内部类必须继承父类或实现接口
●匿名内部类对象只能使用多态形式引用
●不能定义任何静态成员、方法和类
●只能创建匿名内部类的一个实例
●一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类
六、总结
🎁总结:面向对象特性,是Java学习的核心、重头戏,在学习面向对象编程过程中很多很多都不太了解,不断总结不断回头才能印象深刻,做个笔记,一起学习吧~~
👌 作者算是一名Java初学者,文章如有错误,欢迎评论私信指正,一起学习~~
😊如果文章对小伙伴们来说有用的话,点赞👍关注🔎收藏🍔就是我的最大动力!
🚩不积跬步,无以至千里,书接下回,欢迎再见🌹