
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
在 Java 中,包(package)是一种组织类的方式。
包的本质实际上就是创建不同的文件夹(目录)来保存类文件。
包的三大作用
包的命名规则
package com.公司名.项目名.业务模块名package 关键字声明类所属的包。com.公司名.项目名.业务模块名 是包名,通常采用公司域名的倒序加上业务模块名的形式。常用的包
| 包名 | 说明 | 示例类 |
|---|---|---|
java.lang.* | 基本包,Java 中最常用的类,默认引入,不需要显式导入。 | String, Math, Object |
java.util.* | 系统提供的工具包,包含许多常用的工具类。 | Scanner, ArrayList, Date |
java.net.* | 网络相关的包,提供网络通信的类和接口。 | Socket, URL, URLConnection |
java.awt.* | Java 的界面开发包,提供图形用户界面(GUI)组件。 | Button, Frame, Panel |
如何引入包
import 包名* 导入。注意事项和使用细节
package 的作用是声明当前类所在的包,必须放在类的最上面,且一个类中最多只能有一句 package 声明。import 指令的位置在 package 声明之后,类定义之前。可以有多句 import 语句,且没有顺序要求。Java 提供四种访问控制修饰符号,用于控制方法和属性 (成员变量) 的访问权限(范围):
访问修饰符的访问范围
public 修饰,对外公开。protected 修饰,对子类和同一个包中的类公开。private 修饰,只有类本身可以访问,不对外公开。| 访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
|---|---|---|---|---|---|
| 公开 | public | √ | √ | √ | √ |
| 受保护 | protected | √ | √ | √ | × |
| 默认 | 没有修饰) | √ | √ | × | × |
| 私有 | private | √ | × | × | × |
使用的注意事项
public 才能修饰类,并且遵循上述访问权限的特点。封装就是把抽象出的数据属性和对数据的操作方法封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作方法,才能对数据进行操作。
隐藏实现细节
提高安全性
封装的实现步骤
private,防止外部直接修改属性。set 方法,用于对属性进行判断和赋值。get 方法,用于获取属性的值。将构造器和 set 方法结合
public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;
// 我们可以将 set 方法写在构造器中,这样仍然可以验证
setName(name);
setAge(age);
setSalary(salary);
}继承可以解决代码复用,让我们的编程更加靠近人类思维。
当多个类具有共同的属性和方法时,可以将这些共同的特征抽象成一个父类。
子类通过
extends关键字声明继承父类后,便自动拥有父类中定义的属性和方法,无需重复定义。
基本概念
class 子类 extends 父类Object 类的子类,Object 类是所有类的基类(顶级父类)。使用细节
super() 显式调用父类的某个构造器。Object 类。继承的本质分析
public class ExtendsTheory {
public static void main(String[] args) {
Son son = new Son(); // 创建子类对象
// 这时请大家注意,要按照查找关系来返回信息
// (1) 首先看子类是否有该属性
// (2) 如果子类有这个属性,并且可以访问,则返回信息
// (3) 如果子类没有这个属性,就看父类有没有这个属性 (如果父类有该属性,并且可以访问,就返回信息)
// (4) 如果父类没有就按照 (3) 的规则,继续找上级父类,直到 Object
System.out.println(son.name); // 大头儿子
// System.out.println(son.age); // 编译错误,因为 age 是私有的
System.out.println(son.getAge()); // 39
System.out.println(son.hobby); // 旅游
}
}
class GrandPa { // 爷爷类
String name = "大头爷爷";
String hobby = "旅游";
}
class Father extends GrandPa { // 父类
String name = "大头爸爸";
private int age = 39;
public int getAge() {
return age;
}
}
class Son extends Father { // 子类
String name = "大头儿子";
}大头儿子
39
旅游
进程已结束,退出代码为 0
Object 类,然后是 GrandPa 类,再加载 Father 类,最后加载 Son 类。Son 类的实例,并将其返回给 main 方法中的引用。基本概念
多态的应用
方法重写
方法重载
重写和重载比较
| 名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
|---|---|---|---|---|---|
| 重载(overload) | 本类 | 必须一样 | 类型、个数或者顺 序至少有一个不同 | 无要求 | 无要求 |
| 重写(override) | 父子类 | 必须一样 | 相同 | 子类重写的方法返回类型必须 与父类一致,或是其子类类型 | 子类方法不能缩小父类方法的访问范围 |
一个对象的编译类型和运行类型可以不一致。
= 号的左边,运行类型看 = 号的右边。Animal animal = new Dog(); // animal 的编译类型是 Animal,运行类型是 Dog
animal = new Cat(); // animal 的编译类型仍然是 Animal,运行类型变成了 Cat向上转型
父类类型 引用名 = new 子类类型()向下转型
子类类型 引用名 = (子类类型) 父类引用;instanceof 操作符用于判断对象的运行类型是否是指定类型或其子类类型的实例。public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
// 调用方法,进行动态绑定
animal.sound();
// 访问属性,进行静态绑定
System.out.println("Animal's name: " + animal.name);
}
}
class Animal {
String name = "Animal";
void sound() {
System.out.println(name + " sound");
}
}
class Dog extends Animal {
String name = "Dog";
@Override
void sound() {
System.out.println(name + " Bark");
}
}Dog Bark
Animal's name: Animal
进程已结束,退出代码为 0基本介绍
super 代表父类的引用,用于访问父类的属性、方法和构造器。基本语法
super.属性名 访问父类的属性,但不能访问父类的 private 属性。super.方法名(参数列表) 调用父类的方法,但不能访问父类的 private 方法。super(参数列表) 调用父类构造器。只能放在构造器的第一句,且只能出现一次。使用细节
super 和 this 的比较
| 区别点 | this | super |
|---|---|---|
| 访问属性 | 访问当前类中的属性,如果当前类没有此属性,则从父类继续查找 | 从父类开始查找属性 |
| 调用方法 | 调用当前类中的方法,如果当前类没有此方法,则从父类继续查找 | 从父类开始查找方法 |
| 调用构造器 | 调用当前类的构造器,必须放在构造器的首行 | 调用父类构造器,必须放在子类构造器的首行 |
| 特殊作用 | 表示当前对象的引用 | 表示父类对象的引用 |
== 和 equals 的对比
== 是一个比较运算符,既可以判断基本类型,又可以判断引用类型。== 如果判断基本类型,判断的是值是否相等。如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象。equals 是 Object 类中的方法,只能判断引用类型。equals 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如 Integer 和 String。返回该对象的哈希码值。实现
hashCode方法的目的是提高哈希表的性能。
主要特点
hashCode 方法有助于优化哈希表等数据结构的性能,尤其是在大量数据操作时。基本介绍
toString 方法,默认返回的是对象的全类名 + @ + 哈希值的十六进制表示。toString 方法会被默认调用。toString 方法,返回对象的属性信息,这样能更直观地输出对象的状态。基本介绍
finalize 方法是一个由 Object 类提供的方法,当对象被垃圾回收器回收之前,JVM 会自动调用该对象的 finalize 方法。触发时机
finalize 方法。System.gc() 主动请求 JVM 执行垃圾回收。注意
finalize 方法很少被直接使用,通常是应付面试时讨论的一种机制。finalize,它的执行时机是不可预测的。try-with-resources 语句或者显式调用 close() 方法来处理,而不是依赖于 finalize。
评论