当前位置: 首页 > news >正文

Java基础第五章、面向对象程序设计

1.package包

如果引入的不同包里面有相同的类名时,需要对要使用的类进行完整的限定名指定。

2.访问修饰符

子类对父类的方法重写也遵循上面的原则

一个java文件中最多只能有一个public(和文件同名)的类。

3.初始化块

//Driver.java
public class Driver {private long licenceNo;private String name;private int year;//初始化块,编译器会将块中代码编入每一个构造器的开头{System.out.println("Init licenceNo.");licenceNo=System.currentTimeMillis();}public Driver(String name, int year) {this.name = name;this.year = year;}public long getLicenceNo() {return licenceNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public void introduce(){System.out.println("licenceNo:"+licenceNo);System.out.println("Name:"+name);System.out.println("year:"+year);}
}
//Game.java
public class Game {public static void main(String[] args) {Driver driver1=new Driver("Tom",26);driver1.introduce();}
}

初始化执行顺序:

成员变量->初始化块->构造器

4.static关键字

类初始化执行顺序:

类变量(静态变量)->静态初始化块

5.final关键字

修饰方法时,方法无法被重写

final修饰引用类型变量(只能保证引用类型变量所引用的地址不变)

6.抽象类

抽象类:

子类Car:

子类Motorbike:

若子类是抽象类,可以不重写实现父类的抽象方法:

抽象类无法被实例化:

7.接口

default方法需要有个默认方法,需要写方法体

接口定义:

接口实现:

测试:

示例:灵活扩展

面向接口编程:

抽象类和接口对比:

8.内部类

(1)非静态内部类

非静态内部类代码:

public class OuterFirst {private int width = 1024;public void print(){Inner inner=new Inner(1920,1080);//外部类调用内部类方法inner.print();//外部类调用内部类成员变量System.out.println("Outer visit Inner width:"+inner.width);System.out.println("Outer visit Inner height:"+inner.height);}static{//静态块中无法访问非静态内部类}public static void show(){//静态方法中无法访问非静态内部类}//非静态内部类public class Inner{//不可以定义静态成员、静态块、静态方法private int width;private int height;public Inner(int width,int height){this.width=width;this.height=height;}public void print(){//访问内部类成员变量System.out.println("Inner width:"+this.width);System.out.println("Inner height:"+this.height);//访问外部类成员变量System.out.println("Inner visit Outer width:"+OuterFirst.this.width);}}
}

调用演示:

public class InnerDemo {public static void main(String[] args) {//访问非静态内部类//实例化Inner类(通过外部类的实例)OuterFirst.Inner finner=new OuterFirst().new Inner(1920,1080);finner.print();}
}

(2)静态内部类

(3)局部内部类(使用场景很少)

(4)匿名内部类(使用场景比较有特色,例如比较器)

9.枚举类

枚举中定义的各个类型中其实是枚举类的各个实例(比如说这里的MALE和FEMALE)

(1).枚举类如何实现接口

//定义枚举类
public enum Season {SPRING, SUMMER, FALL, WINTER;
}
//使用枚举类
public class EnumDemo {public static void main(String[] args) {//单独使用printSeasonWord(Season.SPRING);printSeasonWord(Season.SUMMER);System.out.println("遍历枚举类中所有的值:");//遍历枚举类中所有的值for(Season value:Season.values()){printSeasonWord(value);}}public static void printSeasonWord(Season season){switch (season){case SPRING:System.out.println("春天:万物复苏");break;case SUMMER:System.out.println("夏天:烈日炎炎");break;case FALL:System.out.println("秋天:硕果累累");break;case WINTER:System.out.println("冬天:白雪皑皑");break;}}
}

定义构造方法的枚举类:

public enum Direction {//设置构造器以后需要使用指定的构造器EAST("东"),SOUTH("南"),WEST("西"),NORTH("北");private final String name;//设置构造器Direction(String name) {this.name = name;}//访问私有变量的方法public String getName(){return this.name;}
}

使用枚举类:

//直接使用枚举类中实例的方法
System.out.println("Direction getName:"+Direction.EAST.getName());
System.out.println("遍历Direction枚举类中所有的值:");
for(Direction direction:Direction.values()){System.out.println("Direction Name:"+direction.getName());
}

枚举类实现接口示例:

方式一:通过Switch对实例进行判断并输出

public enum Gender implements Printer{MALE,FEMALE;@Overridepublic void printer() {switch (this){case MALE:System.out.println("男");break;case FEMALE:System.out.println("女");break;}}
}interface Printer{void printer();
}
//调用测试
System.out.println("枚举类实现定义的接口:");
Gender.MALE.printer();
Gender.FEMALE.printer();

方式二:直接通过实例的内部去分别实现

MALE(){@Overridepublic void printer() {System.out.println("男");}
},FEMALE(){@Overridepublic void printer() {System.out.println("女");}
};

(2).枚举类实现抽象方法

public enum State {ON(){@Overridepublic void print() {System.out.println("开关打开!");}},OFF(){@Overridepublic void print() {System.out.println("开关关闭!");}};public abstract void print();
}
//调用测试
System.out.println("枚举类实现抽象方法:");
State.ON.print();
State.OFF.print();

10.引用类型数组(数组中存放的地址)

示例代码:

public class ReferenceDemo {public static void main(String[] args) {//静态初始化引用类型数组CarsCar[] cars = {new Car("奔驰"),new Car("宝马"),new Car("奥迪")};for (Car car : cars) {car.run();}//动态初始化引用类型数组DriversDriver[] drivers = new Driver[3];drivers[0] = new Driver("Tom");drivers[1] = new Driver("Amy");drivers[2] = new Driver("Daming");for (Driver driver : drivers) {driver.introduce();}}
}class Car {private String brand;public Car(String brand) {this.brand = brand;}public void run() {System.out.println("brand:" + brand);}
}class Driver {private String name;public Driver(String name) {this.name = name;}public void introduce() {System.out.println("My name is " + name);}
}

11.方法区

12.垃圾回收机制

http://www.xdnf.cn/news/162433.html

相关文章:

  • FastAPI 零基础入门指南:10 分钟搭建高性能 API
  • Linux 系统渗透提权
  • Bento4的安装和简单转码
  • 使用Java 操作 Nginx 配置文件
  • 一致性哈希详解:优雅地扩展分布式系统
  • 反爬加密字体替换机制解析
  • HBase协处理器深度解析:原理、实现与最佳实践
  • 【Qt】信号与槽:构建灵活交互的核心机制
  • JAVAEE初阶01
  • 数据安全和合规性市场分析
  • MES系列-MOM(Manufacturing Operations Management,制造运营管理)
  • Redis为什么不直接使用C语言中的字符串?
  • Eigen迭代求解器类
  • async 和 await 详解
  • 论文阅读:2025 arxiv Aligning to What? Limits to RLHF Based Alignment
  • Lustre/Scade/Swan 语义性质中的因果性分析介绍
  • ES6 Map/WeakMap/Set/WeakSet 全解指南
  • 2软考系统架构设计师:第一章系统架构概述 - 练习题附答案及超详细解析
  • 直接映射例题及解析
  • 大模型微调与蒸馏的差异性与相似性分析
  • 字节跳动开源数字人模型latentsync1.5,性能、质量进一步优化~
  • 1.1.1 用于排序规则的IComparable接口使用介绍
  • 【MinIO实战】MinIO权限策略设置与上传文件时报错Access Denied排查
  • 03.01、三合一
  • CentOS7 部署 Ollama 全栈指南:构建安全远程大模型服务
  • 【Python】Python中的浅拷贝和深拷贝
  • Halcon算子应用和技巧13
  • Spring AI Alibaba - Milvus 初体验,实现知识库效果
  • SDC命令详解:使用reset_design命令重置设计
  • 力扣热题100题解(c++)—链表