目录
前言:
前言:
面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
一、概述
1.设计类,创建对象并使用
类(设计图):是对象共同特征的描述。
对象:是真实存在的具体实例。
结论:在java中,必须先设计类,才能创建对象并使用。
2.如何设计类:
public class 类名{
1.成员变量(代表属性,一般是名词) 2.成员方法(代表行为,一般是动词) 3.构造器 4.代码块 5.内部类}
3.如何得到类的对象
类名 对象名 = new 类名();
4.如何使用对象
访问属性:对象名.成员方法
访问行为:对象名.方法名(...)
5.代码演练:
①定义汽车类
public class Car {
/*
成员变量
*/
String name;
double price;
/*
方法
*/
public void start() {
System.out.println(name+"启动了");
}
public void run(){
System.out.println("价格是:"+price);
}
}
②使用汽车类对象
public class Test {
public static void main(String[] args) {
//创建汽车对象
Car c = new Car();
c.name = "宝马";
c.price = 39.7;
System.out.println(c.name);
System.out.println(c.price);
c.start();
c.run();
}
}
结果为:
6.定义类的注意事项:
①类名首字母建议大写,满足驼峰命名法,不能使用关键字,必须是合法标识符,且有意义。
②一个java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。
③成员变量前的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值。
二、内存机制
1.多个对象的内存图:
2.总结:
①对象到底放在哪个位置的?
存放在堆内存中
② Car c = new Car(); c变量名中存储的是什么?
存储的是对象在堆内存中的地址
③成员变量(name、price)的数据放在哪里?存在于哪个位置?
对象中,存在于堆内存中;
2.两个变量指向同一个对象的内存图:
3.垃圾回收机制
当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的"垃圾"。
三、构造器
1.作用:
定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。
2.构造器的格式:
3.调用构造器得到对象的格式
类 变量名称 = new 构造器;
4.构造器的分类和作用:
①无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
②有参数构造器:在初始化对象的时候,同时可以接受参数为对象进行赋值。
5注意事项:
①任何类定义出来,默认自带了无参数构造器,写不写都有;
②一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。
四、this关键字
1.介绍
this关键字可以出现在构造器、方法中;
代表当前对象的地址;
2.作用:
可以用于指定访问当前对象的成员变量、成员方法。
五、封装
面向对象的三大特征:封装、继承、多态。
封装:告诉我们,如何正确设计对象的属性和方法。
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应得行为。
private:修饰的成员只能在当前类中访问。
六、javaBean
javaBean也被称为实体类,其对象可以用于在程序中封装数据。
代码演示:
public class Test2 {
private String name;
private Integer age;
private String sex;
public Test2() {
}
public Test2(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Test2{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
补充:
成员变量和局部变量的区别?