我的身旁是一扇亮了又暗的窗

0%

封装

Scanner类

什么是Scanner类

一个可以解析基本类型和字符串的简单文本扫描器。

例如:读取用户键盘输入的一个数

1
2
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();

System.in系统输入指的是通过键盘录入数据

引用类型一般使用步骤

导包

使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入

  • 格式:

import 包名.类名

  • 实现:

import java.util.Scanner

创建对象

使用该类的构造方法,创建一个该类的对象

  • 格式:

数据类型 变量名 = new 数据类型(参数列表)

  • 实现:

Scanner scanner = new Scanner(System.in);

使用

调用该类的成员方法,完成指定功能

  • 格式:

变量名.方法名();

  • 实现:

int i = scanner.nextInt();

Scanner使用步骤

  • 查看类
    • java.util.Scanner:该类需要import导入后使用
  • 查看构造方法
    • public Scanner(InputStream source):构造一个新的Scanner,它生成的值从指定的输入流扫描
  • 查看成员方法
    • public int nextInt():将输入信息的下一个标记扫描为一个int
  • 实现
1
2
3
4
5
6
7
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
}
}

匿名对象

概念

创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用场景非常有限。

  • 匿名对象:没有变量名的对象
  • 格式:
    • new 类名(参数列表);
  • 实现:
    • new Scanner(System.in);

应用场景

  • 创建匿名对象直接调用方法,没有变量名

  • new Scanner(System.in).nextInt();

  • 但是一旦调用两次方法,就是创建了两个对象,造成浪费

    • new Scanner(System.in).nextInt();
      new Scanner(System.in).nextInt();
      <!--2-->
      
      - 作为返回值
      
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Test {
    public static void main(String[] args) {
    Scanner scanner = input();
    }

    public static Scanner input() {
    return new Scanner(System.in);
    }
    }

体现:

  1. 方法就是一种封装
  2. 关键字private也是一种封装

封装的概述

概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则

属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装的步骤

  • 使用private关键字来修饰成员变量。
  • 对需要访问的成员变量,提供对应的一对getxxx方法、setxxx方法

private关键字

private的含义

  • private是一个权限修饰符,代表最小权限。
  • 可以修饰成员变量和成员方法。
  • private修饰后的成员变量和成员方法,只在本类中才能访问。

格式

private 数据类型 变量名;

  • 实现

使用private修饰成员变量

1
2
3
4
public class Student {
private String name;
private int age;
}

提供get/set方法,访问成员变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Student {
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
age = age;
}
}

this关键字

因为set方法的成员变量赋值会失败(当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部变量),相当于set方法没有用,但是又要满足见名知意的规定

Java就提供了访问当前对象的引用的关键字this

this的含义

this代表所在类的当前对象的引用(地址值),即对象自己的引用。

记住:方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

this的使用

  • 格式

this.成员变量

  • 实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Student {
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;
}
}

构造方法

当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,lava自动提供的默认无参数构造方法就会失效

  • 格式
1
2
3
修饰符 构造方法名(参数列表){
//方法体
}

构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void,使用构造方法后,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
public class Student {
private String name;
private int age;
//无参构造器
public Student() {
}
//有参构造器
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}

注意事项

  • 构造方法的名称必须和所在的类名名称完全一样,就连大小写也要一样
  • 构造方法不要写返回值类型,连void都不要写
  • 构造方法不能return一个具体的返回值
  • 如果你不提供构造方法,系统会给出无参数构造方法
  • 如果你提供了构造方法,系统将不再提供无参数构造方法
  • 构造方法是可以重载的,既可以定义参数,也可以不定义参数

JavaBean(标准代码)

JavaBean是Java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的setget方法。

  • 格式
1
2
3
4
5
6
7
8
9
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//get
//set
}
  • 实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Student {
// 成员变量
private String name;
private int age;
// 无参构造方法
public Student() {
}
// 有参构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 成员方法
public void reading(String name){
System.out.println(name+"正在读书");
}
// get set
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;
}
}