1.说一说类和对象的关系?
类的实例化 - 对象;
多个对象实例的抽象 - 类;
2.说一说全局变量和局部变量的区别?
在Java中,全局变量和局部变量是两种不同类型的变量,它们的主要区别在于作用域、存储位置和生命周期。
1. 作用域:全局变量在整个类中都可以访问,而局部变量只在声明它们的方法、语句块或构造函数中可见。
2. 存储位置:全局变量存储在堆中的对象上,而局部变量存储在栈中。
3. 生命周期:全局变量在整个程序的执行过程中都存在,而局部变量只在其所在的方法、语句块或构造函数的执行过程中存在。
4. 默认值:全局变量会被自动初始化为默认值,而局部变量不会自动初始化,需要手动赋值才能使用。
需要注意的是,全局变量的使用应该谨慎,因为它们可以在程序的任何地方被修改,可能导致代码的可读性和可维护性下降。在设计程序时,应尽量避免过多使用全局变量,而是使用局部变量和参数传递来实现数据的传递和共享。
3.什么是匿名对象?匿名对象在什么情况下使用?有什么局限性
匿名对象是指在创建对象时不给对象命名的对象。它是通过直接调用类的构造器函数并使用`new`关键字创建的,但没有将其赋值给任何变量。因此,匿名对象无法通过变量名进行访问,只能通过创建对象时返回的引用进行访问。
匿名对象通常在以下情况下使用:
1. 临时使用:当我们只需要一个对象来执行一次操作,而不需要在后续代码中再次使用该对象时,可以使用匿名对象。这样可以简化代码,并避免创建不必要的对象。
2. 方法调用:当某个方法需要一个对象作为参数进行调用时,可以使用匿名对象作为实参传递给该方法。
匿名对象的局限性包括:
1. 无法重复使用:由于匿名对象没有被赋值给变量,因此无法在后续代码中再次使用该对象。一旦匿名对象的引用超出了当前作用域,它就会被垃圾回收机制回收。
2. 无法直接调用成员方法:由于没有变量名,无法直接调用匿名对象的成员方法。如果需要调用成员方法,必须在创建匿名对象时通过返回的引用进行调用。
3. 可读性差:由于没有变量名,无法直观地知道该对象的用途和含义,因此可能会降低代码的可读性和可维护性。
因此,使用匿名对象时需要权衡其简洁性和可读性,并根据具体情况进行选择。
4.如何去封装一个类。
在Java中,封装是一种面向对象编程的核心概念。通过封装,我们可以将数据和对数据的操作封装在一个类中,同时隐藏实现细节,提供公共接口供其他类使用。
要封装一个类,可以按照以下步骤进行:
1. 设计类的属性:确定类需要存储的数据,并声明私有的实例变量来保存这些数据。这样可以防止直接访问和修改类的属性,只能通过类的方法来进行操作。
2. 提供公共的访问方法:通过公共的getter和setter方法来访问和修改类的属性。这些方法应该是公共的,以便其他类可以使用它们来获取和设置属性的值。
3. 控制访问权限:使用访问修饰符来限制对类的属性和方法的访问。通常,类的属性应该使用`private`修饰符来限制直接访问,而方法应该使用`public`修饰符来提供公共接口。
4. 添加其他方法:根据类的需求,可以添加其他方法来实现类的功能。这些方法应该根据类的设计目标来命名,并且应该是公共的或私有的,以提供适当的访问权限。
通过封装,我们可以控制对类的属性的访问,提供公共接口来操作属性,并隐藏实现细节。这样可以提高代码的可维护性和可重用性,并提供更好的封装和抽象。
5.说一说堆和栈的区别?
在Java中,堆和栈是两种用于存储数据的内存区域,它们有以下几个区别:
1. 存储内容:堆用于存储对象实例,而栈用于存储基本数据类型和对象的引用。
2. 内存管理:堆的内存由Java的垃圾回收器自动管理,当对象不再被引用时,会被自动回收。栈的内存由编译器自动分配和释放,不需要手动管理。
3. 内存分配方式:堆的内存分配是动态的,对象在运行时创建,大小不固定。栈的内存分配是静态的,编译时确定,大小固定。
4. 存储速度:栈的存取速度较快,因为它使用的是指针操作,存取数据的方式简单直接。而堆的存取速度较慢,因为它需要通过引用来访问对象。
5. 存储空间:栈的空间有限,通常比较小,大小由系统预先分配。而堆的空间较大,可以动态增长,大小受限于系统内存。
6. 生命周期:栈中的数据的生命周期是由作用域决定的,当作用域结束时,栈中的数据会被自动销毁。而堆中的对象的生命周期由程序控制,当没有引用指向一个对象时,它会被垃圾回收器回收。
总结来说,堆和栈在存储内容、内存管理、内存分配方式、存储速度、存储空间和生命周期等方面有所区别。了解它们的区别有助于我们更好地理解Java中的内存管理机制,并在编写代码时进行合理的内存使用和优化。
6.编程题:使用java代码描述人的一些属性和行为[功能],人类拥有的属性有:身高、体重、年龄、姓名、性别,人类拥有的功能有:吃喝睡的功能。并提供一个类,类中有主函数,在主函数中实例化一个类的对象,并且给对象赋值,输出实例化的对象的每个属性,并调用功能
package _09212023.homework_07;
/**
*
* 使用java代码描述人的一些属性和行为[功能],
* 人类拥有的属性有:身高、体重、年龄、姓名、性别,
* 人类拥有的功能有:吃喝睡的功能。并
* 提供一个类,类中有主函数,在主函数中实例化一个类的对象,并且给对象赋值,
* 输出实例化的对象的每个属性,并调用功能
*
*/
public class _6_Person {
private String name;
private int age;
private String gender;
private double height;
private double weight;
// 构造函数
public _6_Person(String name, int age, String gender, double height, double weight) {
this.name = name;
this.age = age;
this.gender = gender;
this.height = height;
this.weight = weight;
}
// 访问器
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void eat() {
System.out.println(name + " is eating.");
}
public void drink() {
System.out.println(name + " is drinking.");
}
public void sleep() {
System.out.println(name + " is sleeping.");
}
public static void main(String[] args) {
_6_Person _6_Person = new _6_Person("John", 25, "Male", 180.0, 75.0);
System.out.println("Name: " + _6_Person.name);
System.out.println("Age: " + _6_Person.age);
System.out.println("Gender: " + _6_Person.gender);
System.out.println("Height: " + _6_Person.height);
System.out.println("Weight: " + _6_Person.weight);
_6_Person.eat();
_6_Person.drink();
_6_Person.sleep();
}
}
7.编程题:描述一下汽车的特性和行为,马路上的汽车,一眼看去,可以发现,汽车有:颜色,品牌,车牌 基本特征,汽车最基本的行为:汽车可以运行,跑起来,要求这个功能更,直接输出当前汽车的颜色、品牌、车牌。另外并提供一个类,类中有主函数,在主函数中实例化一个类的对象,并且给对象赋值,输出实例化的对象的每个属性,并调用功能
package _09212023.homework_07;
/**
*
* 描述一下汽车的特性和行为,马路上的汽车,一眼看去,
* 可以发现,汽车有:颜色,品牌,车牌 基本特征,汽车最基本的行为:汽车可以运行,跑起来,要求这个功能更,
* 直接输出当前汽车的颜色、品牌、车牌。
* 另外并提供一个类,类中有主函数,在主函数中实例化一个类的对象,并且给对象赋值,
* 输出实例化的对象的每个属性,并调用功能
*
*/
public class _7_Car {
private String color;
private String brand;
private String licensePlate;
// 构造函数
public _7_Car(String color, String brand, String licensePlate) {
this.color = color;
this.brand = brand;
this.licensePlate = licensePlate;
}
// 访问器
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getLicensePlate() {
return licensePlate;
}
public void setLicensePlate(String licensePlate) {
this.licensePlate = licensePlate;
}
public void run() {
System.out.println("The car is running.");
}
public static void main(String[] args) {
_7_Car car = new _7_Car("Red", "Toyota", "ABC123");
System.out.println("Color: " + car.color);
System.out.println("Brand: " + car.brand);
System.out.println("License Plate: " + car.licensePlate);
car.run();
}
}
8.使用面向对象的方式完成,学生管理系统(主要考察实例化对象,访问对象的属性和函数)
按要求书写学生管理系统的功能,要求如下
首先进入主界面
如果输入1进入登录页面,在登录页面输入用户名和密码,将用户名和密码封装到User对象中,如果这个对象的用户名为111和这个对象密码为222则显示登录成功,否则就显示登录失败,不论是否登录成功则都返回到主界面
如果输入2则进入注册页面,在注册页面输入用户名和密码,将用户名和密码封装到User对象中,如果对象的用户名为111则提示用户已经存在,返回到主界面,否则就显示注册成功,注册成功以后跳转到登录页面,三个页面分别如下:
所涉及的类有
1)IndexService类:提供了主界面显示的功能
2)User类:有用户名和密码两个属性,并且这两个属性都是int类型
3)UserService类:提供了登录功能和注册功能
4)TaskMain类:主函数调用IndexService对象,通过IndexService对象调用主界面功能来启动程序
主界面如下
欢迎进入学生管理系统****
登录请输入输入1*****
注册请输入输入2*****
登录界面如下:
登录页面*****
请输入数字用户名:
请输入数字密码:
登录成功[登陆失败]
注册界面如下:
注册页面*****
请输入数字用户名:
请输入数字密码:
用户名已存在[注册成功]
package _09212023.homework_07;
/**
*
* 使用面向对象的方式完成,学生管理系统(主要考察实例化对象,访问对象的属性和函数)
*
* 按要求书写学生管理系统的功能,要求如下
*
* 首先进入主界面
*
* 如果输入1进入登录页面,在登录页面输入用户名和密码,将用户名和密码封装到User对象中,如果这个对象的用户名为111和这个对象密码为222则显示登录成功,否则就显示登录失败,不论是否登录成功则都返回到主界面
*
* 如果输入2则进入注册页面,在注册页面输入用户名和密码,将用户名和密码封装到User对象中,如果对象的用户名为111则提示用户已经存在,返回到主界面,否则就显示注册成功,注册成功以后跳转到登录页面,三个页面分别如下:
*
* 所涉及的类有
*
* 1)IndexService类:提供了主界面显示的功能
*
* 2)User类:有用户名和密码两个属性,并且这两个属性都是int类型
*
* 3)UserService类:提供了登录功能和注册功能
*
* 4)TaskMain类:主函数调用IndexService对象,通过IndexService对象调用主界面功能来启动程序
*
* 主界面如下
*
* ***********欢迎进入学生管理系统***************
*
* ***********登录请输入输入1****************
*
* ***********注册请输入输入2****************
*
*
*
* 登录界面如下:
*
* ********登录页面*************
*
* 请输入数字用户名:
*
* 请输入数字密码:
*
* 登录成功[登陆失败]
*
*
*
* 注册界面如下:
*
* ********注册页面*************
*
* 请输入数字用户名:
*
* 请输入数字密码:
*
* 用户名已存在[注册成功]
*
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class _8 {
public static void main(String[] args) {
IndexService indexService = new IndexService();
UserService userService = new UserService();
Scanner scanner = new Scanner(System.in);
while (true) {
indexService.showIndex();
int choice = scanner.nextInt();
if (choice == 1) {
userService.login();
} else if (choice == 2) {
userService.register();
} else {
System.out.println("输入错误,请重新输入");
}
}
}
}
/**
*
* IndexService类:
*
*/
class IndexService {
public void showIndex() {
System.out.println("***********欢迎进入学生管理系统***************");
System.out.println("***********登录请输入输入1****************");
System.out.println("***********注册请输入输入2****************");
}
}
/**
*
* User类:
*
*/
class User {
private int username;
private int password;
public User(int username, int password) {
this.username = username;
this.password = password;
}
public void setUsername(int username) {
this.username = username;
}
public void setPassword(int password) {
this.password = password;
}
public int getUsername() {
return username;
}
public int getPassword() {
return password;
}
}
/**
*
* UserService类:
*
*/
class UserService {
private List<User> userList = new ArrayList<>();
public void login() {
Scanner scanner = new Scanner(System.in);
System.out.println("********登录页面*************");
System.out.println("请输入数字用户名:");
int username = scanner.nextInt();
System.out.println("请输入数字密码:");
int password = scanner.nextInt();
User user = new User(username, password);
if (user.getUsername() == 111 && user.getPassword() == 222) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
}
public void register() {
Scanner scanner = new Scanner(System.in);
System.out.println("********注册页面*************");
System.out.println("请输入数字用户名:");
int username = scanner.nextInt();
for (User user : userList) {
if (user.getUsername() == username) {
System.out.println("用户名已存在");
return;
}
}
System.out.println("请输入数字密码:");
int password = scanner.nextInt();
User user = new User(username, password);
userList.add(user);
System.out.println("注册成功");
login();
}
}