百知教育学习 - 胡鑫喆 - 面向对象的基础
一、什么是对象
- 面向对象与面向过程
- 面向过程: 从计算机执行角度出发 为代码执行过程为核心
- 面向对象: 从人的角度出发,从现实世界角度出发
- 面向对象思想:
- 一切客观存在的事物都是对象,万物皆对象
- 任何对象,一定具有自己的特征和行为
- 特征:成为属性,一般为名词,代表对象有什么
- 行为:成为方法,一般为动词,代表对象能做什么
- 举例 :
- 汽车 车 继承 is a
- 汽车 发动机 关联 has a
- 汽车 司机 依赖 use a
- 面向对象:先确定解决问题所需的对象,再建立对象间关系,从而确定过程
- 程序中的对象
- java中的对象: 数据 代表生活中的一个对象
二、什么是类
- 类的抽取:
- 在一组相同或类似的对象中,抽取处共性的特征和行为,保留所关注的部分
- 类与对象的关系
三、类的组成
- 成员变量(实例变量):局部变量要求必须先赋值再使用,否则编译错误。
- 成员变量与局部变量的区别
- 成员变量与局部变量的区别
- 方法 :
- 声明 : 修饰符 返回值类型 方法名 (形参列表) 抛出的异常 代表了对象能做什么
- 实现: {代码块}
四、方法重载
-
在一个类中,我们可以定义多个同名的方法,方法名相同,参数表不同 对于修饰符、是否有返回值无要求
-
参数表不同: 参数个数不同,参数类型不同,参数类型排列不同
-
public void m(byte a){}
public void m(byte b){}
不能构成重载,只是参数名不同罢了
-
-
编译器在编译时会根据实参的类型,选择相应的方法去调用(向上就近匹配,不允许出现引用不明确的情况)
-
引用不明确:
-
public void m(int a,double b){}
public void m(double b,int c){}
编译器会报错 因为不知道要调用两个方法中的哪个
-
public void m(int a,double b){}
m(1,2);
编译器会把 2(int)转换为2.00(double) -
public void m(double b,int c){}
m(1,2);
编译器会把1(int)转换为1.00(double)
-
-
-
println就是个方法的重载
-
重载的作用: 允许类中的同类方法同名,屏蔽参数的差异(参数不同,同一行为的行为方式会不同)
五、构造方法(构造器)
-
不能定义返回值类型
-
方法名必须和类名相同
-
不能手工调用,只能在对象的创建过程中自动调用一次
-
对象的创建过程:
-
1.分配空间 属性被赋予默认值
-
2.初始化属性 属性被赋予初始值
-
3.调用构造方法 属性可以被赋予构造参数
-
4.调用本类构造方法
public class Student{
String name;
int age;
pubic Student(String n,int s){
name=n;
age=s;
}
}
-
如果一个类中没有定义任何构造方法,系统会提供默认的无参的公开构造方法
-
-
对象的内存分配
-
第一步 :
-
第二步:
-
public static void main(String[] args){
Student s1=new Student();
Student s=new Student();
Student s2=s1;
把s1的地址赋给s2/s2.age++;
s=null;
System.out.println(s.age);
// 空指针异常System.out.println(s1.age);
//19 对象类型的变量传地址
}
class Student{
int age=18;
}
-
引用 : 对象类型的变量(除去8种基本类型的变量,都属于引用) 存储对象的地址
方法传递参数:基本类型的变量传值 ------对象类型的变量传地址(实参和形参指向同一对象)
-
-
对象的创建和访问
-
创建对象的语法:new 类名(构造参数表)
-
比如 : Student类中有name,age属性,构造方法 public Student(String name,int age){this.name=name;this.age=age};
int a=new Student(“lincy”,17); 错误 java语言是强类型的语言,int型的a,但是构造方法参数里有String类型
用Student类型创建对象即可 Student a=new Student(“lincy”,17);
-
-
访问对象的语法: 变量名.属性
变量名.方法(实参列表)
-
this关键字
-
this : 引用 指向当前对象 访问类中的属性和方法,如果不加引用,默认为this引用
用于区分成员变量和局部变量
-
this(); 用在构造方法中,表示调用本类其它构造方法,必须是构造方法的第一条语句 所以一个构造方法中不能出现两个this();
-
public MyClass(){
}
public MyClass(int i){
this();
//调用本类中无参的构造方法
System.out.println("OK");
}