Java日志第11天 2020.7.16
第五章 类的继承和多态
5.3 static关键字
通常访问类的属性和方法需要创建该类的实例,而如果一个成员被声明为static,就能够不引用任何对象实现访问。
5.3.1 静态变量
静态变量只需要在变量前年加上static关键字,不需要通过对象来访问,直接使用“类名.变量名”直接访问,并且该变流量不属于哪一对象。
public class VarDemo{
private static int x=1;
public static void main(String[] args) {
VarDemo.x++;
VarDemo v = new VarDemo();
v.x++;
System.out.println("x="+x);
}
}
5.3.2 静态方法
静态访问是在方法前加上static关键字,一旦方法被声明为静态方法,就可以使用“类名.方法名()”来调用,并不需要对象来调用。
public class StaticMethodDemo {
public static void main(String[] args) {
StaticMethodDemo.test();
}
public static void test(){
System.out.println("test...");
}
}
5.3.3 静态代码块
*static代码块也叫静态代码块,可以有多个,并且为之随便放,它不再任何的方法体内。
*static代码块会优先于构造器执行。
*如果static代码块有多个,找他们在类中出现的先后顺序依次执行。
*每个代码块只会被执行一次。
public class StaticBlockDemo {
static {
System.out.println("静态代码块");
}
public StaticBlockDemo(){
System.out.println("构造方法");
}
public static void main(String[] args) {
StaticBlockDemo d = new StaticBlockDemo();
StaticBlockDemo d2 = new StaticBlockDemo();
}
}
5.4 final关键字
final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量代表该变量是常量。
5.4.1 final属性
final修饰属性,代表该属性是常量,并且该属性不能被修改。
public class FinalVarDemo {
private static final int x=5;
public static void main(String[] args) {
x=10;//报错
}
}
5.4.2 final方法
final修饰的方法不能被重写。
重写并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的。
class A{
public final void t(){
System.out.println("A t()");
}
private final void r(){
System.out.println("A r()");
}
}
class B extends A{
//编译错误!父类方法为final类型,子类不能重写
public void t(){
System.out.println("B t()");
}
//编译正确!父类方法为private
public void r(){
System.out.println("A r()");
}
}
5.4.3 final类
使用final修饰的类表示该类不能被继承。
final class A{
public final void t(){
System.out.println("A t()");
}
}
class B extends A{
//编译错误!子类不能继承
}
5.5 abstract关键字
抽象类中既有抽象方法,也有具体实现的方法。
抽象类必须由其子类继承,才能实例化对象。
抽象方法只有方法头,没有方法体。
5.5.1 抽象类
定义:abstract class 类名()
5.5.2 抽象方法
抽象方法只声明方法头,没有方法体。
public abstract class Type{
//只有方法头,没有方法体
public abstract double area();
}
*抽象类中除了有抽象方法,还可以有具体的实现方法
public abstract class Type{
//只有方法头,没有方法体
public abstract double area();
public void info(){
System.out.println("我是图形");
}
}
*如果想视同这些方法,必须由抽象类的子类来实现
public class Circle extends Type{
private static final double PI = 3.14;
private int r=5;
@Override
public double area(){
double area = PI*r*r;
return area;
}
//重写抽象类中的info
public void info(){
System.out.println("我是圆形");
}
public static void main(String[] args){
Type type = new Circle();
type.area();
type.info();
}
}
今天把第五章搞完了,明天看看视频,感觉这一章掌握的不是很好,看视频巩固一下,再记一记知识点,然后写完后边的题目。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南