JAVA5
1.this关键字
this代表的是当前类的对象,代表的是当前方法的调用者
this既然代表方法的调用者,它实际上和对象的作用是一样的,既可以调用属性,也可以调用方法。
#一个类中可以有什么? 属性 方法 构造器
this不能用在static方法中
开发中,this通常用在赋值,尤其是构造器赋值
public class Ch01 {
public static void main(String[] args) {
Ch01 c = new Ch01();
}
public Ch01(){
}
public Ch01(String str){
this.str = str;
}
public Ch01(String str,int i){
//调用构造器
//不需要写任何的名字
/*
this调用构造器的要求
1.必须在构造器中使用this调用构造器
2.必须是第一句话(第一行代码)
*/
this(str);
this.i = i;
}
String str;
int i;
public void show(String str){
/*
当使用对象去调用属性时,调用的是成员变量
*/
// Ch01 c = new Ch01();
// c.str = str;
this.str = str;//this代表main方法里的c
}
public void info(){
}
}
2.面向对象的特征:封装
(1)代码层面
a:属性私有化,所有的属性都要用private封装
b:提供一个公有的set,get方法。
getter方法能够按照客户的期望返回格式化数值
setter方法可以限制和检验setter方法传入参数是否合法
隐藏对象的内部结构
c:正确定义一个类:
所有的属性私有化
每个属性都有对应的 set,get方法
(2)思想层面
a:多个地方都要用同一个功能,那我们可以把类似的功能代码封装成一个方法
b:如果说多个方法都需要重复使用,我们可以把一堆方法封装成一个类
public class Dog {
private String color;
private int age;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.空指针异常(NullPointerException)
#什么情况下会出现空指针异常? 引用数据类型的默认值(初始值是null,空引用)
3个异常 |
数组下标越界 |
内存溢出(错误) |
空指针 |
#案例
注册和登录:
封装:属性一定要私有化,提供共有的set、get方法
1.创建一个User类,username和password
2.创建一个Employee类,id和name
3.Demo类
登录:
输入账号和密码,然后去数组中对比,遍历数组,分别对比账号和密码,如果成功,则输出登录成功
空指针异常 NullPointerException
注册2.0版本:
用户名不能重复
遍历:用户名和数组中的用户名对比一下
public class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// User类型的数组
// User类型的数中保存的就是一个一个的User对象
// 当从User类型的数组中取值的时候,比如说users[0]是一个User类型的对象
User [] users = new User[10];
int index = 0;
for (;;){
System.out.println("请选择功能:1、注册 2、登录");
String flag = sc.next();
switch (flag) {
case "1":
if(index == users.length){
User [] newUsers = new User[users.length*2];
for (int i = 0; i < users.length; i++) {
newUsers[i] = users[i];
}
users = newUsers;
}
System.out.println("请输入账号:");
int username = sc.nextInt();
boolean isRight1 = true;
for (User u : users){
if (u != null){
if(username == u.getUsername() ){
isRight1 = false;
}
}
}
if (isRight1){
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 ++;
} else {
System.out.println("账号重复,注册失败");
}
break;
case "2":
System.out.println("请输入账号:");
int username1 = sc.nextInt();
System.out.println("请输入密码:");
int password1 = sc.nextInt();
boolean isRight = false;
for (User u : users) {
// if(u != null){
// System.out.println(u.getUsername() + "," + u.getPassword());
// }
if (u != null){
if(username1 == u.getUsername() && password1 == u.getPassword()){
isRight = true;
}
}
}
if (isRight){
System.out.println("登陆成功");
} else {
System.out.println("登陆失败");
}
}
}
}
}
4.总结:
(1)this代表当前类的对象,代表方法的调用者,通常用在构造器赋值,
set方法赋值。当形参名和成员变量的名相同时,赋值操作。
(2)封装,思想封装,把一堆重复执行的代码封装成方法。把一堆重复执行的方法封装成一个类。
(3)封装,代码层次的封装,所有的属性私有化。private,每个属性提供对应的setter和getter方法。
(4)以后我们的赋值操作:
a:不再使用对象.属性的方式
b:使用构造器
(5)习惯:必须保证每个类都有一个无参构造器
所学内容能够理解掌握
天气晴 心情良好