面向对象
面向:找 拿 对象:东西
面向对象编程:
找或拿东西过来编程
面向对象的好处:
符合人类思维习惯,编程简单,更好理解
设计对象并使用
类就是设计图
类:对对象共同特征的描述
对象:是真实存在的具体实例
结论:在Java中必须先设计类,才能创建对象并使用
如何设计类:
public class 类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器(看下面)
4.代码块(后面补充)
5.内部类(后面补充)
}
例:
public class Car{
// 属性()
String name;
double price;
//行为(方法)
public void start(){
}
public void run(){
}
}
获得类的对象:
类名 对象名 = new 类名();
Car c = new Car();
使用对象:
访问属性:对象名.成员变量
访问行为:对象名.方法名(...)
public class Car { //成员变量 String name; double price; //方法 public void start(){ System.out.println(name+"启动了"); } public void run(){ System.out.println("价格是:"+price+"的"+name+"跑的飞快!"); } }
public class OopDemo { public static void main(String[] args) { Car c1 = new Car(); c1.name = "奔驰"; c1.price = 40.0; System.out.println(c1.name); System.out.println(c1.price); c.start(); c.run(); System.out.println("----------------"); Car c2 = new Car(); c2.name = "奥迪"; c2.price = 60.0; System.out.println(c2.name); System.out.println(c2.price); } }
定义类的几个补充注意事项
1.类名首字母建议大写,且有意义,满足“驼峰模式”
2.一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。(实际开发中建议还是一个文件定义一个class类)
3.成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值
成员变量的默认规则
与数组的默认规则相同
总结对象
1.对象到底放在哪个位置?
堆内存中
2.Car c = new Car(); c变量名中存储的是什么?
存储的是对象在堆内存中的地址
3.成员变量(name price)的数据放在哪里,存在于哪个位置?
对象中,存在于堆内存中
垃圾回收
注意:
当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
Java存在自动垃圾回收器,会定期进行清除
构造器
构造器的作用:
定义在类中的,可以用于初始化一个类的对象,并返回对象的地址
Car c = new Car();//无参构造器
构造器格式:
修饰符 类名(){
}
例:
public class Car{
//无参构造器
public Car(){
}
//有参构造器
public Car(String name,double price){
}
}
1.构造器的作用?
初始化类的对象,并返回对象的地址
2.构造器有几种,各自的作用是什么?
无参数构造器:初始化对象时,成员变量的数据都均采用默认值
有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值
3.构造器有哪些注意事项?
任何类定义出来,默认就自带了无参数构造器,写不写都有
一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了
this关键字
this关键字:可以出现在构造器,方法中,代表当前对象的地址
作用:可以用于指定访问当前对象的成员变量,成员方法
public class Student { String name; int age; char six; public Student(){ System.out.println("无参数构造器"); } public Student(String name,int age,char six){ System.out.println("有参数构造器"); this.name = name; this.age = age; this.six = six; } public void run(String name){ System.out.println("现在是"+this.name+"和"+name+"比赛!"); } }
public class ThisDemo { public static void main(String[] args) { Student s = new Student(); System.out.println(s.name); System.out.println(s.age); System.out.println(s.six); Student s1 = new Student("大珍珠",23,'男'); System.out.println(s1.name); System.out.println(s1.age); System.out.println(s1.six); s1.run("黑珍珠"); } }
1.this关键字是什么?
出现在构造器和成员方法中,代表当前对象的地址
2.this关键字在构造器中,成员方法中可以做什么?
可以用于指定访问当前对象的成员
封装
面向对象的三大特征:封装 继承 多态
封装:告诉我们,如何正确的设计对象的属性和方法
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
可能比较抽象
人画圆:是圆提供了画圆的方法
人开门:是门提供了开门的方法
张三砍死李四:李四提供了死亡方法
1.什么是封装?
告诉我们,如何正确设计对象的属性和方法
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
2.理解封装思想有什么好处?
让编程变得很简单,有什么事,找对象,调方法就行
降低我们的学习成本,可以少学,少计,需要时直接找
更好的封装
一般会把成员变量使用private隐藏起来,对外就不能直接访问了
提供public修饰的getter和setter方法暴露取值和暴露赋值
提高业务功能设计的安全性,提高程序逻辑性和开发效率
标准JavaBean
可以称为实体类,其对象可以用于在程序中封装数据
标准JavaBean需要满足书写格式:
成员变量使用private修饰
提供成员变量对应的setXxx() / getXxx()方法
必须提供一个无参数构造器;有参数构造器可写可不写
public class User { private String name; private int age; private char sex; public User() { } public User(String name, int age, char sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } }