CoreJava 面向对象
面向对象
一、面向过程与面向对象
- 面向过程:将事情分析之后,按照步骤依次翻译为代码,代码的执行顺序就是事情的处理顺序
- 面向对象:当需要解决一个问题的时候,寻找能够解决该问题的对象,利用其方法解决问题的过程
二、对象与类
- 对象:客观世界存在的事物
- 类:具有相同属性方法等一类事物
- 类是对象的共性,是对象的模板;对象是类的实例,是类的表现
- 对象的特点:
- 属性:描述该对象具有什么属性
- 方法:描述该对象可以做什么事情
- 类的特点:
- 成员方法:属性
- 成员方法:方法
三、成员变量
-
语法:在类以内,函数之外声明的变量
-
赋值:
-
如果需要在声明之后进行赋值,那么必须按照显示初始化的方式书写
public class Student { String name = "zhangs"; } -
如果不需要在声明之后赋值,成员变量使用默认值
public class Student { String name; }
-
-
有效范围:全类内有效,与其声明的位置无关
-
命名冲突:成员变量间不允许命名冲突,但可以和局部变量命名冲突,当发生这种情况的时候,局部变量优先
| 局部变量 | 成员变量 | |
|---|---|---|
| 值 | 需要先赋值,然后才能使用 | 具有默认值 |
| 有效范围 | 从声明的位置开始,到其所在代码块结束 | 全类中有效,与声明的顺序和位置无关 |
| 命名冲突 | 局部变量在重合的范围之内不允许命名冲突 | 成员变量之间不允许命名冲突,但可以和局部变量命名冲突,当发生这种情况的时候,局部变量优先 |
四、成员方法
-
语法:
public 返回值类型 方法名(形参列表){ //方法实现 } -
声明的位置:类以内,其他方法之外
-
方法的声明:
-
表达了该类的对象具有会做什么
-
完整的语法
修饰符 返回值类型 方法名(形参列表) 可能抛出的异常{ //方法实现 } -
注意:修饰符在语法不冲突的情况下可以使用多个,相互之间没有顺序要求,例如public static都是修饰符,写作static public也可以
-
-
方法的重载(overload):
- 语法概念:在同一个类中,声明了多个方法名相同但形参列表不同的方法,这些方法之间互为重载
- 语法要求:
- 在同一个类中
- 方法名相同
- 形参列表不同(数据类型不同,数量不同,顺序不同)
- 对修饰符,返回值类型和可能抛出的异常没有要求
- 方法调用:在编译时根据传入的参数数据类型,顺序,个数去匹配相对应的方法
注意:当出现传入实参的数据类型与参数列表都不一致的时候,有数据类型自动向上匹配的原则,但是,不允许出现引用不明确
五、构造方法
-
语法:
public 类名(形参列表) 可能抛出的异常{ //方法实现 } -
声明的位置:类以内,其他方法之外
-
语法要求:
- 构造方法没有返回值类型
- 构造方法的方法名必须和类名完全一致
- 构造方法不能被手动调用,仅在创建对象的时候被虚拟机自动调用
- 当一个类中没有显式声明构造方法的时候,虚拟机会默认分配一个公开的、没有参数的构造方法
- 当一个类中显式声明任何构造方法之后,虚拟机不再默认分配构造方法
六、对象的创建
- 语法:类名 变量名 = new 类名(实际参数);
- 对象创建的过程:
- 分配空间:对所有属性赋予默认值
- 虚拟机调用构造方法:
- 初始化属性:对所有属性赋予初始值
- 执行构造法中的代码:通过构造参数的传递进行属性的赋值
七、对象的使用
-
访问属性:通过 对象变量名.属性 的方式进行访问
- 获取对象中属性的值
public class TestStudent { public static void main(String[] args) { Student s = new Student(); String sname = s.name;//获取对象中属性的值 System.out.println(sname); } } class Student{ String name = "zhangs"; } b.为对象的属性赋值(通过访问属性的方式)
class Student { String name; } public class TestStudent{ public static void main(String[] args) { Student s = new Student(); s.name = "zhangs";//为属性赋值 System.out.println(s.name); } } c.为对象的属性赋值(通过构造方法的方式)
class Student { String name; public Student() { } public Student(String sname) { name = sname; } } public class TestStudent{ public static void main(String[] args) { Student s = new Student("zhangs");//通过构造方法为属性赋值 System.out.println(s.name); } } -
调用方法:通过 对象变量名.方法名(实参列表) 的方式进行访问
class Student {
public void study(int hours){
System.out.println("Student study "+hours+" hours!");
}
}
public class TestStudent{
public static void main(String[] args) {
Student s = new Student();
s.study(10);//调用对象的study方法并传入对应的实参
}
}
八、this关键字
this的概念:this代表一个对象,代表当前对象,就像自然语言中的“我”
-
this.的使用:
-
this.属性:用于访问本类的成员变量,通常用于处理局部变量与成员变量重名的情况,当不存在重名的时候,可以省略
class Student { String name = "zhangs"; public void show(){ String name = "guox"; System.out.println(name);//访问局部变量,打印guox System.out.println(this.name);//访问成员变量,打印zhangs } } -
this.方法:调用本类中的其他成员方法,通常可以省略
class Student { public void m1(){ System.out.println("invoke m1()"); } public void m2(){ this.m1();//调用本类中的方法 m1();//this. 可以省略 } }
-
-
this()的使用:
只用在构造方法中,表示引用本类中的其他构造方法,避免代码的冗余,必须声明在构造方法的第一行有效语句,但应该避免递归调用
class Student { String name; public Student(){} public Student(String name){ this();//指引虚拟机引用无参构造方法 this.name = name; } }
#Carrawayang written
浙公网安备 33010602011771号