面向对象
类和对象
//测试类
public static void main(String[] args) {
Phone p = new Phone();
p.bread="小米";
p.price = 1999.98;
System.out.println(p.bread);
System.out.println(p.price);
p.call();
p.play();
Phone p1 = new Phone();
p1.bread="苹果";
p1.price = 8999.98;
System.out.println(p1.bread);
System.out.println(p1.price);
p1.call();
p1.play();
}
//javaBean类
public class Phone {
String bread;
double price;
public void call(){
System.out.println("在打电话");
}
public void play(){
System.out.println("手机在玩游戏");
}
}
注意事项
练习一:
//测试类
public static void main(String[] args) {
Girlfriend g1 = new Girlfriend();
g1.name = "小刘";
g1.age = 23;
g1.sex= 2;
g1.eat();
g1.sleep();
System.out.println(g1.name);
System.out.println(g1.age);
System.out.println(g1.sex);
System.out.println("========================================");
Girlfriend g2 = new Girlfriend();
g2.name = "小诗诗";
g2.age = 20;
g2.sex= 2;
g2.eat();
g2.sleep();
System.out.println(g2.name);
System.out.println(g2.age);
System.out.println(g2.sex);
}
//javabean类
public class Girlfriend {
//成员变量,(属性)
String name;
int age;
int sex;
//成员变量(方法)
public void eat(){
System.out.println(this.name+"在吃饭");
}
public void sleep(){
System.out.println(this.name+"在睡觉");
}
}
封装
面向对象三大特征:
封装,继承,多态。
封装:如何正确设计对象的属性和方法
对象代表什么,就得封装什么数据,并提供相应的行为。
小结:
pricate关键字
设置为私有。本类外无法直接访问。
//javaBeab类
public class Girlfriend {
//成员变量,(属性)
private String name;
private int age;
private int sex;
public void setName(String Name){
name = Name;
}
public String getName(){
return name;
}
public void setAge(int n){
if (n>=18&&n<=50){
age = n;
}else {
System.out.println("数据有误");
}
}
public int getAge(){
return age;
}
public void setSex(int g){
sex = g;
}
public int getsex(){
return sex;
}
//成员变量(方法)
public void eat(){
System.out.println(this.name+"在吃饭");
}
public void sleep(){
System.out.println(this.name+"在睡觉");
}
}
//测试类
public class GirlfriendTset {
public static void main(String[] args) {
Girlfriend g1 = new Girlfriend();
g1.setName("小刘");
g1.setAge(23);
g1.setSex(2);
g1.eat();
g1.sleep();
System.out.println(g1.getName());
System.out.println(g1.getAge());
System.out.println(g1.getsex());
System.out.println("========================================");
Girlfriend g2 = new Girlfriend();
g2.setName("小诗诗");
g2.setAge(20);
g2.setSex(2);
g2.eat();
g2.sleep();
System.out.println(g2.getName());
System.out.println(g2.getAge());
System.out.println(g2.getsex());
}
}
小结:
this关键字
构造方法
package test4;
public class Student {
//如果没有写构造方法那么虚拟机会自动添加空参的构造方法
public Student(){
System.out.println("看看我执行了么");
}
public Student(String name ,int age){
System.out.println("执行有参构造");
this.name=name;
this.age=age;
}
private String name ;
private int age;
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 static void main(String[] args) {
Student s1 = new Student("小赵",20);
System.out.println(s1.getName());
System.out.println(s1.getAge());
}
注意事项
小结
构造方法概述:
创建对象时虚拟机自动调用构造方法,作用是给成员变量进行初始化。
标准的javaBean类
package test5;
public class User {
private String username;
private String password;
private String email;
private String gender;
private int age;
//PTG插件一键生成JavaBean
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;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return email
*/
public String getEmail() {
return email;
}
/**
* 设置
* @param email
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "User{username = " + username + ", password = " + password + ", email = " + email + ", gender = " + gender + ", age = " + age + "}";
}
}
对象内存图
一个对象的内存图
两个对象的内存图
两个引用指向同一个对象
基本数据类型和引用数据类型
this的内存原理
this的作用:区分局部变量和成员变量。
this的本质:所在方法调用者的地址值。