一、为什么使用面向对象
编程思想:
面向过程:做某件事情都需要自己亲历亲为,按照步骤去完成
面向对象:做某件事情不需要自己亲历亲为,只需指定特定的对象去完成即可
优点:
1.开发交流更加流畅
2.提高开发效率
3.符合人类的思想思维
2.什么是对象?
对象是实际存在的该事物的个体,是具体的、现实的。万物皆为对象
对象 包含哪些东西?
属性: 由名词构成的一些数据 被称为属性 例如 名字 身高 等等
方法: 由动词构成的一些功能 被称为方法 例如 唱歌跳舞 等等
类中的属性 ----成员变量 和局部变量
成员变量:定义在类中,有初始值
局部变量:定义在方法中,无初始值
类中的方法 ----成员方法
3.什么是类?
类是对某一事物的描述,是抽象的,概念上的定义,就是多个对象抽象出来的特征。
事物 → 类
属性 → 成员变量
行为 → 成员方法
4.创建对象
Person p = new Person();
5. 什么是构造方法
1.构造方法和类名相同
2.构造方法没有返回值
3.构造方法创建对象时被调用
构造方法分类: 3种
- 隐式无参 在创建类的时候 默认带一个不带参数的构造方法
- 显示无参 在类中可以把构造方法写
- 显示有参 构造方法能被看到,并且有参数的存在
例如:
public Demo() {
}
public Demo(String name) {
this.name=name;
}
public Demo(String name,int age){
this.name=name;
this.age=age;
}
6.构造方法的重载
方法重载是让类以统一的方式处理不同类型数据的一种手段。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性。例子:
class MethodOverloading {
viod receive(int i) {
System.out.println("Received one int data");
System.out.println("i="+i);
}
viod receive(float f) {
System.out.println("Received one float data");
System.out.println("f="+f);
}
viod receive(String s) {
System.out.println("Received a String");
System.out.println("s="+s);
}
}
7.this关键字
this:代表当前类的对象
用途:
1.用于区分成员变量和局部变量同名的冲突问题
2.可以调用当前类的构造方法。语法:this([参数列表]);不传参数在调用当前类的无参构造方法,相反调用参数列表相吻合的有参构造方法。注意:此条调用语句必须是方法体中的第一条语句。
3.可以调用成员属性:this.成员属性名
4.可以调用成员方法:this.成员方法名([参数列表])
//this关键字的应用:
//1.调用当前类的属性(区分成员变量和局部变量同名赋值问题)
//2.调用当前类的方法
//3.调用当前类的其他构造方法
//
//
//注意:this关键字访问类的成员方法时不受访问权限的控制,可以访问本类中所有的成员变量和成员方法,包括private 的成员变量和成员方法
public class Person
String name;
int age;
//显示无参构造方法
public Person(){
this("tom",20);
}
//定义有参构造
public Person(String name){
this.name = name;
public Person(String name,int age){
this(name);
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void testMethod(String name){
this.setName(name);//通过this调用了当前类中的其他方法
System.out.println(this.name);
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("___________this调用本类属性________________");
person.setName("tom");
System.out.println("name1"+person.name);
System.out.println("___________this调用本类方法________________");
person.testMethod("lili");
System.out.println("___________this调用本类构造方法_____________");
Person person1 = new Person("tom",30);
System.out.println(person.name);
System.out.println(person.age);
}
}
8.封装
可以将变量进行私有化 private 修饰变量 ,提供访问变量的方法
方法的名称 可以对变量进行设置和获取 set|get 让其他类来访问该变量
例如: private String name
public void setName(String name){ this.name = name; } public String getName(){ return name; } |
Public ---访问修饰符 任何地方都 可以访问
private访问修饰符 只能在本类中访问
9.在一个类中可以有以下变量
类变量:存在于类中,方法之外,声明时必须前面加static关键字:如: static int flag;随着类的加载而产生;
成员变量:
局部变量:
局部变量和成员变量的区别:
1.声明的位置不同
成员变量(实例变量):类中,方法体外
局部变量:方法体中或方法声明上
2.内存中存储的位置不同
成员变量:位于堆内存中
局部变量:位于栈内层中
3.生命周期不同
成员变量:随着对象的产生而产生,随着对象的消亡而消亡
局部变量:随着方法的调用而产生,随着方法调用完毕而结束
4.初始状态不同
成员变量:有默认的初始化值
局部变量:没有默认的初始化值,必须手动初始化后才可以使用。
5.执行优先级
当成员变量和局部变量同名时,调用时采取“就近原则”;
————————————————