一、类与对象
1.面向对象学习的三条主线
- Java类及类的成员;
- 三大特征:封装、继承、多态;
- 其他关键字:this、super、static、final、abstract、interface、package、import
“大处着眼,小处着手”
2.面向对象和面向过程的比较
- 面向过程:强调功能行为,以函数为最小单位,考虑怎么做;
- 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
3.完成一个项目的思路
现实世界中的实体->概念世界中的类->形成计算机世界中类的定义->类实例化为计算机世界中的对象。
4.面向对象的两个重要概念
- 类:对一类事物的描述,抽象的、概念上的定义;
- 对象:实际存在的该类事物的每个个体,也称为实例(instance)。
面向对象程序设计的重点:类的设计;设计类,就是设计类的成员。
对象 是由 类 new出来的,派生出来的。
5.面向对象思想落地实现的规则
- 创建类,设计类的成员;
- 创建类的对象;
- 通过“对象.属性”或“对象.方法”调用对象的结构。
几个概念的使用说明
- 属性 = 成员变量 = field = 域、字段
- 方法 = 成员方法 = 函数 = method
- 创建类的对象 = 类的实例化 = 实例化类
6.对象的创建和对象的内存解析
Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1; //没有创建一个新的对象,共用一个堆空间中的对象实体。
如果创建了一个类的多个对象,则每个对象都独立地拥有属于一套类的属性。(非static的)意味着,如果修改一个对象的属性a,则不影响另外一个对象的属性a。
7.匿名对象
创建的一个对象,没有显式的赋给一个变量名,即为匿名对象。
特点:匿名对象只能调用一次。
举例:
new Phone().sendEmail();
new Phone().playGame();
new Phone().price = 9999;
new Phone().showPrice();
应用场景:
package com.geng.test;
public class InstanceTest {
public static void main(String[] args) {
Phone p = new Phone();
System.out.println(p);
p.sendEmail();
p.playGame();
// 匿名对象
new Phone().sendEmail();
new Phone().playGame();
new Phone().price = 1999;
new Phone().showPrice();
PhoneMall mall = new PhoneMall();
mall.show(p);
mall.show(new Phone());
}
}
class PhoneMall{
public void show(Phone phone){
phone.sendEmail();
phone.playGame();
}
}
class Phone{
double price;
public void sendEmail(){
System.out.println("发送邮件");
}
public void playGame(){
System.out.println("玩游戏");
}
public void showPrice(){
System.out.println(price);
}
}
8.理解“万事万物皆对象”
在Java语言范畴中,将功能、结构封装到类中,通过类的实例化,调用具体的功能结构
- Scanner、String
- 文件:File
- 网络资源:URL
涉及到Java语言与前端html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。
JVM内存结构
编译完源程序之后,生成一个或多个字节码文件
使用JVM中 类的加载器和解释器 对生成的字节码文件进行解释运行。
类的结构之一:属性
类的结构之一:方法
方法的重载
1.定义
“两同一不同”
同一个类、同一个方法名
参数列表不同:参数个数不同,参数类型不同
2.举例
Arrays类中的sort()方法
binarySearch():
PrintStream中的println()
3.如何判断
按照定义:两同一不同
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没关系
4.如何确定类中某一个方法的调用
方法名-->参数列表
可变个数形参Varargs
1.使用说明
- 格式:数据类型 ... 变量名(String ... strs);
- 当调用可变个数形参的方法时,传入的参数可以是:0个、1个、2个...;
- 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载;
- 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不能共存;
- 可变个数形参在方法的形参中,必须声明在末尾;
- 可变个数形参在方法的形参中,最多只能声明一个可变形参。
2.举例说明
public class MethodArgsTest {
public static void main(String[] args) {
MethodArgsTest mat = new MethodArgsTest();
mat.show(5);
mat.show("我是一个参数");
mat.show("参数1", "参数2", "参数3");
}
public void show(int i){
System.out.println("show-int i");
}
public void show(String s){
System.out.println("show-String s");
}
public void show(String ... strs){
System.out.println("show-string...strs");
}
}