面向对象的思想:
面向对象是基于面向过程的编程思想
面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能
面向对象的思想特点:
A:是一种更符合我们思考习惯的思想
B:可以将复杂的事情简单化
C:将我们从执行者变成了指挥者
举例:
买电脑:
面向过程:我要买电脑——我要明确买电脑的意义——上网查对应的参数信息——去电脑城买电脑——讨价还价——买回电脑
面向对象:我要买电脑——xx去给我买电脑——买回电脑
注意:两个引用指向同一个堆内存,无论哪一个引用对堆内存进行操作,另一个就会受到影响
我们学习编程语言就是为了把现实世界的事物模拟出来,实现信息化
我们是如何表现现实世界的事物的呢?
答:
A:属性 就是事物的描述信息
B:行为 就是事物能够做什么
Java语言最基本的单位就是类,所以,我们在后面的学习过程中,是通过类来体现现实世界的事物的
类:是一组相关的属性和行为的集合
对象:就是该事物的具体体现
举例:
类: 学生
对象: 班长
类是如何和事物进行对应的呢?
类:
成员变量:和我们前面学习过的变量的定义是一样的。
位置不同:类中,方法外
初始化值:不需要给初始化值
成员方法:和我们前面学习过的方法的定义是一样的。
去掉static关键字
使用一个类,其实就是使用该类的成员。(成员变量和成员方法)
而我们要想使用一个类的成员,就必须首先拥有该类的对象
创建对象的格式:类名 对象名 = new 类名();
成员变量:对象名,变量名
成员方法:对象名,方法名(…)
成员变量和局部变量的区别:
A:在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或方法声明上(形式参数)
B:在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值得问题
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
通过对象直接访问成员变量,会存在数据安全问题
private关键字:
是一个修饰符可以修饰成员变量,也可以修饰成员方法
被private修饰的成员只能在本类中访问
针对private修饰的成员变量,我们会相应的提供getXxx()和setXxx()用于获取和设置成员变量的值,方法用public修饰
如果有局部变量名和成员变量名相同,在局部使用的时候采用的是就近原则
如果重名的话使用this关键字解决这个问题
this:所代表的所在类的对象引用
使用场景:局部变量隐藏成员变量
构造方法:给对象的数据进行初始化
格式:
方法名和类型相同
没有返回值类型,连void都不能写
没有具体的返回值
构造方法的注意事项:
- 如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用
- 如果我们给出了构造方法,系统将不再提供默认的无参构造方法供我们使用
这个时候,如果我们想使用无参构造方法,就必须自己提供
推荐:自己给无参构造方法 - 构造方法也是可以重载的
成员变量的赋值:
A:setXxx()方法
B:带参构造方法
构造方法格式:类名 对象名 = new 构造方法(…)
无参and有参eg:
package com.itnineday_07;
/*
* 汽车类
*/
public class Car {
private String brand;
private int price;
private String place;
public Car(){};
public void setBrand(String brand){
this.brand = brand;
}
public String getBrand(){
return brand;
}
public void setPrice(int price){
this.price = price;
}
public int getPrice(){
return price;
}
public void setPlace(String place){
this.place = place;
}
public String getPlace(){
return place;
}
public Car(String brand,int price,String place){
this.brand = brand;
this.price = price;
this.place = place;
}
}
package com.itnineday_07;
/*
* 汽车类的测试类
*/
public class CarDemo {
public static void main(String[] args) {
Car c = new Car();
c.setBrand("奥迪");
c.setPrice(300000);
c.setPlace("西安");
System.out.println(c.getBrand()+"---"+c.getPrice()+"---"+c.getPlace());
Car c2 = new Car("奔驰",400000,"天津");
System.out.println(c2.getBrand()+"---"+c2.getPrice()+"---"+c2.getPlace());
}
}
如果方法的返回值是类名,其返回的就是该类的对象