Java07--面向对象
1.面向对象介绍
面向对象就是写程序的套路,面向对象编程可以理解为拿东西过来做对应的事情
面向对象编程的例子:
import java.util.Random;
import java.util.Scanner;public class Demo {public static void main(String[] args) {//创建一个Random对象,用于得到随机数Random r = new Random();//生成1~10之间的随机数int data = r.nextInt(10)+1;System.out.println(data);//创建一个Scanner对象,用于接收用户输入的数据Scanner sc = new Scanner(System.in);int age = sc.nextInt();System.out.println(age);}
}
2.类和对象
类(设计图):是对象共同特征的描述
对象:是真实存在的具体东西
Java中,必须先设计类,才能获得对象
2.1 类的组成和定义
类由属性和行为两部分组成
属性:指事物的特征,如手机事物(品牌,价格);在类中通过成员变量来体现(类中方法外的变量)
行为:指事物能执行的操作,如手机事物(可以打电话);在类中通过成员方法来体现(和一般的方法相比,去掉 static 关键字即可)
类的定义步骤
定义类
编写类的成员变量
编写类的成员方法
示例:
public class Demo {//成员变量String brand;int price;//成员方法public void call() {System.out.println("打电话");}public void sendMessage(){System.out.println("发短信");}
}
2.2 对象的使用
- 创建对象的格式
类名 对象名 = new 类名()
- 调用对象的格式
对象名.成员变量
对象名.成员方法
示例:
public class Demo {public static void main(String[] args) {//创建对象Phone p = new Phone();//使用成员变量p.brand = "小米";p.price = 1999;System.out.println(p.brand);System.out.println(p.price);//使用成员方法p.call();p.sendMessage();}
}
2.3 练习
需求:定义一个学生类,再定义一个学生测试类,在测试类中通过对象完成成员变量和成员方法的使用
分析:
- 成员变量:姓名,年龄
- 成员方法:学习,写作业
代码实现:
public class Demo {//成员变量String name;int age;//成员方法public void study(){System.out.println("好好学习,天天向上");}public void doHomework(){System.out.println("写作业");}
}
//学生测试类
public class StudentDemo {public static void main(String[] args) {//创建对象Demo s = new Demo();//使用对象s.name = "李华";s.age = 18;System.out.println(s.name + "," + s.age);s.study();s.doHomework();}
}
3. 封装
3.1 封装概述
是面向对象三大特征之一(封装、继承、多态)
对象代表什么,就要封装对应的数据,并提供数据对应的行为
3.2 封装思想的好处
- 让编程变得简单,有什么事,找对象,调用方法
- 降低学习成本,可以少学少记,不用记对象有哪些方法,有需要时去找就行
3.3 封装代码实现
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,这时就要用到一个关键字 private
4. private关键字
4.1 概述
private 是一个修饰符,可以用来修饰成员变量和成员方法
被 private 修饰的成员,只能在本类中进行访问
针对 private 修饰的成员变量,如果需要被其他类使用,需提供相应操作:
- 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用 public 修饰
- 提供“get变量名()”方法,用于获取成员变量的值,方法用 public 修饰
4.2 代码示例:private 的使用
- 需求:定义标准的学生类,要求 name 和 age 使用 private 修饰,并提供 set ,get 方法和 show 方法(显示数据)
- 代码:
//学生类
public class Demo {//成员变量private String name;private int age;//针对每一个私有化的成员变量,都要提供get和set方法//set方法:给成员赋值//get方法:对外提供成员变量的值public void setName(String n) {name = n;}public String getName() {return name;}public void setAge(int a) {if (a >= 18 && a <= 50) {age = a;} else {System.out.println("非法参数");}}public int getAge() {return age;}//行为public void show() {System.out.println(name + "," + age);}
}
//学生测试类
public class Text {public static void main(String[] args) {//创建对象Demo gf1 = new Demo();//给成员变量赋值gf1.setName("李华");gf1.setAge(18);System.out.println(gf1.getName());System.out.println(gf1.getAge());gf1.show();}
}
5.成员变量和局部变量
5.1 区别
- 类中位置不同:成员变量在类中方法外,局部变量在方法内部或方法声明上
- 内存中位置不同:成员变量(堆),局部变量(栈)
- 生命周期不同:成员变量随着对象的消失而消失,局部变量随着方法的调用完毕而消失
- 初始化值不同:成员变量有默认初始化值;局部变量没有,必须先定义,赋值才能用
代码示例 :
public class Demo {//成员变量private String name;private int age;public void method(){//局部变量int age = 10;System.out.println(age);}
5.2 就近原则
谁离我近,就用谁
public class Demo {//成员变量private String name;private int age;public void method(){//局部变量int age = 10;System.out.println(age);}
代码打印10
6.this关键字
this 修饰的变量用于指代成员变量,其主要作用是区分局部变量和成员变量(这两个变量的重名问题)
方法的形参如果与成员变量同名,不带 this 修饰的变量指的是形参
代码示例:
public class Demo {private String name;private int age;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {if (a >= 18 && a <= 50) {this.age = age;} else {System.out.println("非法参数");}}public int getAge() {return age;}public void show() {System.out.println(name + "," + age);}
}
7.构造方法
7.1 概述
是一种特殊方法,也叫作构造器、构造函数;作用是在创建对象的时候给成员变量初始化
格式:
public class 类名{
修饰符 类名(参数){
方法体;
}
}
7.2 注意事项
- 方法名与类名相同
- 没有返回值类型,也没有 void
- 如果没有定义构造方法,系统会给出一个默认的无参数构造方法
- 建议:无论是否使用,都写上无参数构造方法
- 可以用带参构造,给成员变量进行初始化
代码示例:
//学生类class Student {private String name;private int age;//无参数构造方法public Student() {}public Student(String name) {this.name = name;}public Student(int age) {this.age = age;}public Student(String name,int age) {this.name = name;this.age = age;}public void show() {System.out.println(name + "," + age);}
}
//测试类public class StudentDemo {public static void main(String[] args) {//创建对象Student s1 = new Student();s1.show();//public Student(String name)Student s2 = new Student("李华");s2.show();//public Student(int age)Student s3 = new Student(18);s3.show();//public Student(String name,int age)Student s4 = new Student("李华",18);s4.show();}
}
8.标准的JavaBean类
标准类制作 :
- 类名要见名知意
- 成员变量需用 private 修饰
- 至少提供两个构造方法:无参构造方法和带全部参数的构造方法
- 提供每一个成员变量对应的 get和 set方法
- 如果还有其他行为,都要写上
代码示例:
public class User {private String username;private String password;private String email;private String gender;private int age;//空参构造方法public User() {}//带全部参数的构造public User(String username, String password, String email, String gender, int age) {this.username = username;this.password = password;this.email = email;this.gender = gender;this.age = age;}//get和setpublic String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}