Day12
需求:创建人类的对象,并操作对象
分析:
人类 - Person
属性:name、sex、age
方法:eat、sleep
场景:创建多个对象,去操作对象
//测试类:该类中有main方法,测试我们写好的代码
public class Test01 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.name = "巴得伟";
p1.sex = '男';
p1.age = 23;
p2.name = "波多野结衣";
p2.sex = '女';
p2.age = 18;
p1.eat();
p1.sleep();
p2.eat();
p2.sleep();
Person.method();
}
}
public class Person {
//成员变量
String name;
char sex;
int age;
//成员方法
public void eat(){
System.out.println(this.name + "吃饭饭");
}
//成员方法
public void sleep(){
System.out.println(this.name + "睡觉觉");
}
//静态方法
public static void method(){
System.out.println("静态方法");
}
}
面向对象内存图:
注意:
1.class文件只加载一次
2.class文件中包含了该类中的所有信息(包含方法等)
3.new对象会在堆中开辟空间,存储成员变量
4.成员变量系统会赋默认值
5.每个对象共享一份成员变量
6.方法中的this表示调用该方法的对象(谁调用的,this - 就指向谁)
7.成员方法可以调用this
8.静态方法使用类名调用,所以静态方法内不能使用this
1.构造方法
前言 - 创建对象的语法:类型 引用 = new 构造方法;
含义:与类名相同,且没有返回项的方法(在类中定义的。方法名与类名字相同,无返回值类型声明(包括void)。)
作用:
1.和new关键字在一起表示创建对象
2.初始化数据
注意:
- 1.创建对象的过程(Person p = new Person()😉,也叫做实例化
- 2.当类中没有有参构造时,系统会默认实现无参构造
经验:类中编写了有参构造,我们记得把无参构造加上
需求:创建人类,操作对象
public static void main(String[] args) {
//类型 引用 = new 构造方法;
Person p = new Person("巴得伟", '男', 23);
System.out.println(p.name);
System.out.println(p.sex);
System.out.println(p.age);
p.eat();
p.sleep();
}
}
public class Person {
//成员变量
String name;
char sex;
int age;
//构造方法 - 无参构造
public Person(){
System.out.println("无参构造");
//初始化数据
this.name = "默认值";
this.sex = '男';
this.age = 0;
}
//构造方法 - 有参构造
public Person(String name,char sex,int age){
System.out.println("有参构造");
this.name = name;
this.sex = sex;
this.age = age;
}
//成员方法
public void eat(){
System.out.println(this.name + "吃饭饭");
}
//成员方法
public void sleep(){
System.out.println(this.name + "睡觉觉");
}
}
构造方法内存图:
public class Person{
//注意:这种不是构造方法,是成员方法
public void Person(){}
}
1.1 构造方法的注意事项
* 构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
* 构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
* 推荐的使用方式
无论是否使用,都手工书写无参数构造方法
* 重要功能
可以使用带参构造,为成员变量进行初始化
每一个类中都有一个默认的无参的构造方法。
构造方法可以有多个,但参数不一样,就是重载。
1.2 赋值方式
创建对象并为其成员变量赋值的两种方式
1:无参构造方法创建对象后使用setXxx()赋值
2:使用带参构造方法直接创建带有属性值的对象
public class StudentDemo {
public static void main(String[] args) {
//无参构造方法创建对象后使用setXxx()赋值
Student s1 = new Student();
s1.setName("小彭");
s1.setAge(21);
s1.show();
//使用带参构造方法直接创建带有属性值的对象
Student s2 = new Student("小彭",21);
s2.show();
}
}
1.3 idea直接生成构造方法
鼠标右键,选择生成,找到get、set,ctrl+a全选一键生成。
或者鼠标右键,选择 ptg to javaBean,一键生成。
2.标准类制作
① 类名需要见名知意
② 成员变量使用private修饰
③ 提供至少两个构造方法
无参构造方法
带全部参数的构造方法
④ get和set方法
提供每一个成员变量对应的setXxx()/getXxx()
⑤ 如果还有其他行为,也需要写上
案例:
public class User {
//1.私有化全部的成员变量
//2.空参构造
//3.带全部参数的构造
//4.针对于每一个私有化的成员变量都要提供其对应的get和set方法
//5.如果当前事物还有其他行为,那么也要写出来,比如学生的吃饭,睡觉等行为
private String username;//用户名
private String password;//密码
private String email;//邮箱
private char gender;//性别
private int age;//年龄
//空参构造方法
public User() {
}
//带全部参数的构造
public User(String username, String password, String email, char gender, int age) {
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
//get和set
public 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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
System.out.println(username + "在吃饭");
}
}
测试类:
public class Test {
public static void main(String[] args) {
//写一个标准的javabean类
//咱们在课后只要能把这个标准的javabean能自己写出来,那么就表示今天的知识点就ok了
//利用空参构造创建对象
User u1 = new User();
//如果利用空参创建对象,还想赋值只能用set方法赋值
u1.setUsername("zhangsan");
u1.setPassword("1234qwer");
u1.setEmail("pcb@qq.cn");
u1.setGender('男');
u1.setAge(23);
//获取属性的值并打印
System.out.println(u1.getUsername() + ", " + u1.getPassword()
+ ", " + u1.getEmail() + ", " + u1.getGender() + ", " + u1.getAge());
u1.eat();
System.out.println("=============================");
//简单的办法
//利用带全部参数的构造来创建对象
//快捷键:ctrl + p
User u2 = new User("lisi","12345678","pcb@qq.cn",'女',24);
System.out.println(u2.getUsername() + ", " + u2.getPassword()
+ ", " + u2.getEmail() + ", " + u2.getGender() + ", " + u2.getAge());
u2.eat();
}
}