## 1、封装
### 1.1 封装的概念
* 将类的某些信息隐藏在类内部,不允许外部程序直接访问
* 通过该类提供的方法来实现对隐藏信息的操作和访问
* 隐藏对象的信息
* 留出访问的接口
### 1.2 封装的特点
1. 只能通过规定的方法访问数据
2. 隐藏类的实例细节,方便修改和实现
### 1.3 封装的代码实现
1. 修改属性的可见性:设为`private`
2. 创建`getter/setter`方法:设为`public`用于属性的读写
3. 在`getter/setter`方法中加入属性控制语句:对属性的合法性进行判断
```
public class Person {
// 1. 修改属性的可见性:设为 private
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.setName(name);
this.setAge(age);
}
// 2. 创建 getter/setter 方法:设为 public 用于属性的读写
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
// 3. 在 getter/setter 方法中加入属性控制语句:对属性的合法性进行判断
public void setAge(int age) {
if (age < 0 || age > 150) {
System.out.println("年龄输入有误");
} else {
this.age = age;
}
}
}
```
【选择】当类中的一个成员方法被下面哪个修饰符修饰后,该方法只能在本类中被访问()(选择一项)
```
A public B private C final D default
```
【选择】运行以下 Java 代码,说法正确的是()
```
public class Test {
private int add(int a, int b) {
return a + b;
}
private int add(int a, int b, int c) {
return a + b + c;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.add(1, 2) + test.add(3, 4, 5));
}
}
```
```
A 15 B 程序运行正常,但无输出 C 编译报错 D 运行报错
```
【选择】Java 封装的意义是()(选择三项)
```
A 防止使用者错误修改系统的属性
B 提高系统的独立性
C 提高软件的可重用性
D 提高构建大型系统的风险
```
【编程】编写自定义类实现图书信息设置。运行参考效果如下所示:
```
图书价格最低 10 元
书名:红楼梦
作者:曹雪芹
出版社:人民文学出版社
价格:10.0 元
书名:小李飞刀
作者:古龙
出版社:中国长安出版社
价格:55.5 元
```
```
public class BookTest {
public static void main(String[] args) {
// 实例化对象,调用相关方法实现运行效果
}
}
public class Book {
// 私有属性:书名、作者、出版社、价格
// 通过构造方法实现属性赋值
/**
* 通过公有的get/set方法实现属性的访问,其中:
* 1. 限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10
* 2. 限定作者、书名均为只读属性
*/
// 信息介绍方法,描述图书所有信息
}
```
## 2、使用包进行类管理
在Java中通过包来进行代码文件的管理,解决同名文件冲突问题。
* Java 中一个包里不能存在同名类
* 包的命名采用域名倒序+模块+功能
* 推荐域名全部小写
* package语句必须放在Java源文件中的第一行
* 建议每个包内存储信息功能单一
### 2.1 跨包进行类的调用
* 使用`*`通配符来加载包下的所有类
* 加载需要的的类(推荐使用)
* 使用类全名进行跨包调用类
【选择】下面代码的运行结果是()(选择一项)
```
package hello;
public class Student {
public Student() {
System.out.println("hello");
}
}
package world;
public class Student {
public Student() {
System.out.println("world");
}
}
package test;
import hello.*;
import world.Student;
public class Test {
public static void main(String[] args) {
Student stu = new student();
}
}
```
```
A hello B world C hello world D 编译报错
```
【选择】关于 package+包名; 的说法不正确的是()(选择一项)
```
A 一个Java源文件可以有多个package语句
B 建议包名应该全部英文小写
C 建议包名命名方式:域名倒序+模块+功能
D "package+包名"; 必须放在Java源文件中的第一行
```
【选择】下面关于import,class和package的声明顺序哪个是正确的()(选择一项)
```
A package import class
B class import package
C import package class
D package class import
```
【编程】编写自定义类实现用户信息类。程序参考运行效果图如下:
```
用户名:Tom
密码:123456
用户名:Jerry
密码:123456
结果:用户名或密码不一致
```
```
public class Test {
public static void main(String[] args) {
// 实例化对象,调用相关方法实现运行效果
}
}
public class User {
// 定义属性用户名、密码
}
public class UserManager {
// 用户信息验证的方法
public String checkUser(User u1, User u2) {
// 判断用户名和密码是否为空,是否一致
}
}
```
## 3、static 关键字
* 类对象共享
* 类加载时产生,销毁时释放,生命周期长
【选择】以下代码运行结果为()(选择一项)
```
public class Demo {
char ch = 'c';
static char getChar() {
return ch;
}
public static void main(String[] args) {
System.out.println(new Demo().getChar());
}
}
```
```
A 编译出错
B 输出:c
C 编译正常,运行时报错
D 编译正常,运行时无输出结果
```
【选择】下列关于static的说法不正确的是()(选择一项)
```
A 可以定义静态方法,但不能定义静态变量
B class前不可以使用static作为修饰符
C static可以把普通的成员方法变成为一个静态方法
D static可以把一个普通方法变成一个类方法
```
【选择】关于静态方法和非静态方法,以下描述正确的是()(选择一项)
```
A 非静态方法只能访问非静态变量
B 静态方法既可以直接访问本类的静态变量,也可以直接访问本类的非静态变量
C 静态方法在类外只能通过类名来调用
D 非静态方法在类外只能通过对象来调用
```
【选择】下面这段代码中,报错的地方原因是()(选择两项)
```
public void run(String name){
System.out.println(name + "快跑");
}
public static void eat() {
run();
System.out.println("小猫吃鱼");
}
```
```
A 没有传入参数
B 没有使用类方法类调用
C 不能使用静态引用去访问非静态的方法
D 只要实例化对象就不会报错了
```
【选择】下面代码的运行结果是()(选择一项)
```
public class Student {
public String name;
public static 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;
}
}
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("小红");
stu.setAge(13);
Student stu1 = new Student();
stu.setName("小明");
stu.setAge(18);
System.out.println(stu.getName() + "今年" + stu.getAge() + "岁了");
System.out.println(stu1.getName() + "今年" + stu1.getAge() + "岁了");
}
}
```
```
A 小红今年13岁了
B 小明今年18岁了
C 小明今年18岁了 null今年18岁了
D 小红今年13岁了 小明今年18岁了
```
【编程】请根据效果图以及任务要求完成代码。程序参考运行效果图如下:
```
CodeBlock的静态代码块
CodeBlock的主方法
产生Code类实例对象
Code的静态代码块
Code的构造块
Code的构造方法
产生CodeBlock类实例对象
CodeBlock的构造块
CodeBlock的构造方法
```
```
public class CodeBlock {
// 创建CodeBlock的构造块
// 创建CodeBlock的静态代码块
// 创建CodeBlock的构造方法
public static void main(String[] args) {
// 编写代码测试运行优先顺序,运行结果参见效果图
}
}
```
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架