Java的面向对象编程

Java面向对象编程

一、类和对象

  • 类(设计图):是对象共同特征的描述
  • 对象:是真实存在的具体东西

在Java中,必须先设计类,才能获得对象

1、定义类和获取类的对象

1.1类的定义
public class 类名 {
    1、成员变量(代表属性,一般是名词)
    2、成员方法(代表行为,一般是动词)
    3、构造器
    4、代码块
    5、内部类
}
1.11定义类的注意事项
  • 用来描述一类事物的类,专业叫做:Javabean类,在javabean类中,是不写main方法的
  • 编写main方法的类,叫做 测试类,我们可以在测试类中创建javabean类的对象并进行赋值调用
  • 类名的首字母建议大写,需要见名知意,驼峰模式
  • 在一个Java文件中可以定义多个class类,且只能一个类是public修饰,且public修饰的类名必须成为代码文件名
  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值
1.2得到类的对象

类名 对象名 = new 类名();

示例:

public class Phone {
	//属性
	String brand;
	double price;
	
	//行为
	public void call() {
		System.out.println("手机在打电话");
	}
	
	public void playGame() {
		System.out.println("手机在玩游戏");
	}
}
public class Phonetest {

	public static void main(String[] args) {
		//创建手机的对象
		Phone p = new Phone();
		
		//给手机赋值
		p.brand = "小米";
		p.price = 2999.98;
		
		//获取手机对象中的值
		System.out.println(p.brand);
		System.out.println(p.price);
		
		//调用手机中的方法
		p.call();
		p.playGame();
		
		//第二部手机
		Phone p2 = new Phone();
		p2.brand = "苹果";
		p2.price = 6999;
		System.out.println(p2.brand);
		System.out.println(p2.price);
		p2.call();
		p2.playGame();
	}

}

二、封装

对象代表什么,就得封装对应的数据,并提供数据对应的行为

2.1private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • private修饰的成员只能在本类中才能访问

private关键字为了保证数据的安全性,如果想对私有化成员变量赋值则需要在类中提供set 和 get方法,可以在set方法中判断数据的合法性并决定要不要赋值

2.2就近原则和this关键字

  • 就近原则:在任意类中如果局部变量与成员变量(全局变量)同名时,谁距离近用谁

  • this关键字:加上this关键字后即可直接表示成员变量(全局变量)

示例:
public class Girlfriend {
	//属性
	private int age;
	
	public void func(int age) {
		System.out.println(this.age);	// 输出:0
		System.out.println(age);	// 输出:20
		
	}
}	
public class Girlfriendtest {

	public static void main(String[] args) {
		Girlfriend gf1 = new Girlfriend();
		
		gf1.func(20);
	}

}
2.1和2.2综合示例:
public class girlfriend {
	//属性
	String name;
	private int age;
	private String gender;
	
	//private 头缀为私有化成员变量
	//针对每个私有化成员变量,都要提供get和set方法
	//set方法:给成员变量赋值
	//get方法:对外提供成员变量的值
	
	//age
	//如果局部变量与成员变量重名 则根据就近原则 但可以使用this.获得成员变量
	public void setage(int age) {
		if(age >= 18 && age <= 50) {
			this.age = age;
		}else {
			System.out.println("非法数据");
		}
	}
	
	public int getage() {
		return this.age;
	}
	
	//gender
	public void setgender(String n) {
		if(n.equals("女")) {
			gender = n;
		}else {
			System.out.println("非法数据");
		}
	}
	
	public String getgender() {
		return gender;
	}
	
	//行为
	public void sleep() {
		System.out.println("女朋友在睡觉");
	}
	
	public void eat() {
		System.out.println("女朋友在吃饭");
	}
}
public class girlfriendtest {

	public static void main(String[] args) {
		//创建女朋友的对象
		girlfriend gf1 = new girlfriend();
		gf1.name = "勺子";
		gf1.setage(20);
		gf1.setgender("女");
		
		System.out.println(gf1.name);
		int a = gf1.getage();
		System.out.println(a);
		System.out.println(gf1.getgender());
		
		gf1.eat();
		gf1.sleep();
		
		System.out.println("*********************");
		girlfriend gf2 = new girlfriend();
		gf2.name = "秋子";
		gf2.setage(19);
		gf2.setgender("nv");
		
		System.out.println(gf2.name);
		System.out.println(gf2.getage());
		System.out.println(gf2.getgender());
		
		gf2.eat();
		gf2.sleep();
		
	}

}

输出:

勺子
20
女
女朋友在吃饭
女朋友在睡觉
*********************
非法数据
秋子
19
null
女朋友在吃饭
女朋友在睡觉

2.3构造方法

​ 构造方法也叫做构造器、构造函数

2.31构造方法概述:
  • 创造对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化
2.32构造方法特点:
  1. 方法名与类名相同,大小写也要一致
  2. 没有返回值类型,连void都没有
  3. 没有具体的返回值(不能由return带回结果数据)
2.33构造方法格式:
public class Student {
    
    修饰符 类名(参数) {
        方法体;
	}
}
public class Student {
    private String name;
    private int age;
    
    public Student() {
        //空参构造
    }
    
    public Student(String name, int age) {
		...//带参构造
    }
}
2.34执行时机:
  1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,就会调用一次构造方法
2.35构造方法的注意事项:

1、构造方法的定义

  • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

2、构造方法的重载

  • 带参构造方法,和无参构造方法,两者方法名相同,但参数不同

3、推荐的使用方法

  • 无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
示例:
public class student {
	private String name;
	private int age;
	
	//如果没写构造方法
	//虚拟机会自动给加一个空参构造方法
	//如下为未显示的空参构造
	public student() {
		System.out.println("看看是否执行");
	}
	
	//如果定义了新的构造方法 则系统将不会提供默认的构造方法
	//so 都写为好
	
	//如下构造新的构造方法
	public student(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public void setname(String name) {
		this.name = name;
	}
	public String getname() {
		return this.name;
	}
	
	public void setage(int age) {
		if(age >= 5 && age <= 25) {
			this.age = age;
		}else {
			System.out.println("错误数据");
		}
	}
	public int getage() {
		return this.age;
	}
}
public class studenttest {

	public static void main(String[] args) {
		
		student s = new student();	// 输出:看看是否执行
		student q = new student("小明",18);
		System.out.println(s.getage());	// 输出:0
		System.out.println(q.getage());	// 输出:18
		System.out.println(q.getname());	//输出:小明
	}

}

三、标准的JavaBean

要求:

1、类名需要见名知意

2、成员变量使用private修饰

3、提供至少两个构造方法

  • 无参构造方法
  • 带全部参数的构造方法

4、成员方法

  • 提供每一个成员变量对应的setXxx()getXxx()
  • 如果还有其他行为也需要写上
示例:
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和set方法
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getUsername() {
		return this.username;
	}
	//后面的八个省略...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值