企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 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) { // 编写代码测试运行优先顺序,运行结果参见效果图 } } ```