2022.7.19-第三组-王晓-学习笔记
作者:互联网
7-19-Day10
课堂笔记
1.构造器
- 什么时候用构造器赋值?
- 看创建对象是为了干什么?
- 如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器
- 如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值
public class Ch01 {
public static void main(String[] args) {
// person是Person类的对象,是Person类的实例
Person person = new Person();
// 对象有什么功能?
// 对象可以调属性,可以调方法
// 对象调用的属性和方法
person.name = "小明";
person.age = 20;
// person.eat();
Car car = new Car();
car.brand = "奔驰";
car.color = "黑色";
// car.run();
// person.travel(car);
// p2出生,就会有name,age,wife
Wife wife = new Wife();
wife.name = "李四";
wife.age = 25;
// p2一创建出来,所有的属性都会跟着初始化
Person p2 = new Person("张三",25,wife);
// p3一创建出来,就只有name和age,没有wife
Person p3 = new Person("王五",26);
}
}
- 无参构造器
如果一个类我们手写了构造器
原来的无参构造器失效
我们养成的一个习惯:保证每个类都有无参构造器
public class Person { String name; int age; Debit debit; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public void openAccount(Debit debit) { this.debit = debit; // 开户成功,显示一下开户信息 debit.show(); show(); } public void in(double money) { // 存款:修改余额并且重新赋值 debit.balance += money; System.out.println("存款成功!余额为:" + debit.balance); } public void out(double money) { // 取款:修改余额并且重新赋值 if(money <= debit.balance){ debit.balance -= money; System.out.println("取款成功!余额为:" + debit.balance); }else { System.out.println("余额不足!余额为:" + debit.balance); } } public void show() { System.out.println("姓名:" + name + ",年龄:" + age); } }
2.this关键字
- this代表的是当前类的对象,this代表的是当前方法的调用者
- this既然是代表方法的调用者,它实际上和对象的作用是一样的
- 既可以调属性,也可以调方法。
- 一个类中可以有什么?
- 属性,方法,构造器
- this不能用在static方法中。
- 开发中,this通常用在什么位置!
- 通常用在赋值,构造器赋值。
3.封装public class Ch02 { String str; int i; public Ch02(){ } public Ch02(String str) { this.str = str; } public Ch02(String str,int i){ // this.str = str; // 调用构造器 // 不需要写任何的名字 /* this调用构造器的要求 1、必须在构造器中使用this调用构造器 2、必须是第一句话(第一行代码) */ this(str); this.i = i; } public void show(String str) { /* 当使用对象调用属性时,调用的是成员变量 */ // Ch02 c = new Ch02(); // this(str); this.str = str; this.info(); // info(); } public void info(){ System.out.println(str + "," + i); } public static void main(String[] args) { // Ch02 c = new Ch02(); // c.show("哈哈"); // System.out.println(c.str); // Ch02 c2 = new Ch02("呵呵"); // c2.info(); Ch02 c3 = new Ch02("嘿嘿",20); c3.info(); Person person = new Person("张三",25); } }
-
1.代码层面
(1)属性私有化,所有的属性都要使用private封装
(2)提供一个公有的set,get方法。
getter方法能够按照客户的期望返回格式化的数据
setter方法可以限制和检验setter方法传入的参数是否合法
隐藏对象的内部结构
正确定义一个类:
(1)所有的属性私有
(2)每个属性都有对应的setter、getter方法
public static void main(String[] args) { // Dog dog = new Dog("灰色",2); // dog.show(); Dog dog = new Dog(); // dog.show(); // ...... dog.setAge(20); int age = dog.getAge(); System.out.println(age); } }
4.空指针异常
什么情况下会出现空指针异常: 引用数据类型的默认值(初始值是null,空引用) 3个异常: 1、数组下标越界 2、内存溢出(错误) 3、空指针
练习:
注册和登录! 封装:属性一定要私有化,提供公有的set、get方法 1、创建一个User类,username和password 2、创建一个Employee类,id和name 3、Demo类。 登录: 输入账号和密码,然后去数组中比对, 遍历数组,分别比对账号和面,如果比对成功,则输出登录成功,则输入账号或密码错误! 空指针异常NullPointerException 注册2.0版本: 用户名不能重复! 遍历,用户名和数组中的用户名比对一下 public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// User类型的数组
// User类型的数中保存的就是一个一个的User对象
// 当从User类型的数组中取值的时候,比如说users[0]是一个User类型的对象
User [] users = new User[10];
users[0] = new User(123456,123456);
int index = 1;
main:for (;;){
System.out.println("请选择功能:1、注册 2、登录");
String flag = sc.next();
u:for(;;){
switch (flag) {
case "1":
System.out.println("请输入账号:");
int username = sc.nextInt();
for (User user : users) {
if(user != null){
if(username == user.getUsername()){
System.out.println("用户名不能重复,请重新输入!");
continue u;
}
}
}
System.out.println("请输入密码:");
int password = sc.nextInt();
// 保存账号密码,保存的是User对象
// 构建User对象
User user = new User(username,password);
users[index] = user;
System.out.println("注册成功,账号:" + users[index].getUsername() + ",密码:" + users[index].getPassword());
index ++;
continue main;
case "2":
System.out.println("请输入账号:");
int username1 = sc.nextInt();
System.out.println("请输入密码:");
int password1 = sc.nextInt();
boolean b = false;
for (User u : users) {
if(u != null){
if(u.getUsername() == username1 && u.getPassword() == password1) {
b = true;
break;
// System.out.println("登录成功!");
}
// System.out.println("账号或密码错误!")
}
}
if(b) {
System.out.println("登录成功!");
}else {
System.out.println("账号或密码错误!");
}
}
}
}
}
}
学习心得
今天的内容对我来说较为难快速吸收,需要逐渐的去理解和消化。
标签:第三组,19,System,User,2022.7,println,new,public,out 来源: https://www.cnblogs.com/bai030/p/16512935.html