1.Ecilpse中快捷设置构造方法、get、set方法
自动生成构造方法:
代码区域点右键—Source—Generate Constructors from Superclass… 可自动生成无参数构造方法;
public Student() {
// TODO Auto-generated constructor stub
}
代码区域点右键—Source—Generate Constructors using Fields… 可自动生成带参数构造方法;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
自动生成getXxx()/setXxx()方法:
代码区域点右键—Source—Generate Getters and Setters… 可自动生成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;
}
2.创建数组对象
Student[] students = new Student[3];
Student s1 = new Student("曹操",40);
Student s2 = new Student("刘备",35);
Student s3 = new Student("孙权",30);
students[0] = s1; //将创建的对象赋值给数组对象
students[1] = s2;
students[2] = s3;
for(int i=0; i < students.length; i++){
System.out.println(students[i].getName()+"---"+students[i].getAge());
}
3.对象数组的内存分析
分析:根据1.中代码分析,由于堆内存中存放的是实例对象,实例化的对象数组存储在这里(认为地址为001),其次是三个实例化的对象s1、s2、s3,也存储在堆内存中,但是该对象包含的方法(包括成员方法和构造方法,假设其地址为0001)包含在方法区中,在s1、s2、s3实例化对象中只是包含方法的在方法区中的地址;此时,将s1、s2、s3对象分别赋值给对象数组students,此时堆内存中的数组对象分别指向堆内存中的s1、s2、s3的实例化对象。
3.为什么要学习集合类?
为什么会出现集合类:我们学习的是面向对象编程,而面向对象编程的特点是通过对象对事物进行描述。为了方便对多个对象 进行操作,我们就必须对多个对象进行存储,而想要对多个对象进行存储,就不能是一个基本的变量,而是一个容器类型的变量。到目前为止,我们学习过的容器类型变量有:StringBuilder、对象数组。
StringBuilder:结果为一个存储字符串类型的对象,不一定满足我们的要求。
对象数组:长度固定,适应不了变化的需求。
集合类的特点:可以对多个对象进行存储,并且长度可变。
4.创建ArrayList集合对象并添加元素
ArrayList<String> array = new ArrayList<String>(); //这里的array是长度可变的集合类对象
array.add("hello");
array.add("world");
array.add("student"); //这里的添加是依次添加
array.add(1,"age");//在指定位置添加,这里索引1变为age,之前的索引1“world”向后移一个索引位置
for(int i=0; i < array.size(); i++){ //集合类遍历的标准用法
String s = array.get(i);
System.out.println(s);
}
常用的ArrayList集合的方法:增(add)、删(delete)、改(set)、查(get、size)
5.ArrayList集合练习–键盘录入数据并进行存储
注:
1.为了提高代码的复用性,把键盘录入的数据传递给学生对象,并存储到集合中的动作用一个方法来实现。
2.定义方法时注意两个明确:明确返回值、明确入参
public static void main(String[] args){
ArrayList<Student> array = new ArrayList<Student>();
addStudent(array);
addStudent(array);
addStudent(array);
for(int i=0; i < array.size(); i++){
Student s = array.get(i);
System.out.println(s.getName()+"---"+s.getAge());
}
}
public void addStudent(ArrayList<Student> array){ //封装的方法
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名");
String s1 = sc.nextLine();
System.out.println("请输入学生年龄"); //这里的age在Student类中定义为String成员
String s2 = sc.nextLine();
Student s = new Student(); //创建String类并设置内容
s.setName(name);
s.setAge(age);
array.add(s); //将String类数据存储到集合类中
}
6.ArrayList集合练习–学生管理系统练习
学生管理系统设计思路:
A:定义学生类
B:学生管理系统的主界面的代码编写
C:学生管理系统的查看所有学生的代码编写
D:学生管理系统的添加学生的代码编写
E:学生管理系统的删除学生的代码编写
F:学生管理系统的修改学生的代码编写
package javaprj;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManager {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<Student>();
while(true) {
System.out.println("--------------欢迎来到学生管理系统--------------");
System.out.println("1 查看所有学生");
System.out.println("2 添加学生");
System.out.println("3 删除学生");
System.out.println("4 修改学生");
System.out.println("5 退出");
System.out.println("请输入您的选择:");
/*创建键盘录入对象*/
Scanner sc = new Scanner(System.in);
String choiceString = sc.nextLine();
switch(choiceString){
case "1":
//查看所有学生
findAllStudent(array);
break;
case "2":
//添加学生
addStudent(array);
break;
case "3":
//删除学生
deleteStudent(array);
break;
case "4":
//修改学生
updataStudent(array);
break;
case "5":
//退出
//break;
default:
System.out.println("谢谢您的使用");
System.exit(0); //JVM退出
break;
}
}
}
public static void findAllStudent(ArrayList<Student> array) {
/*首先判断集合内有没有数据,若没有数据则不让程序继续执行下去*/
if(array.size() == 0) {
System.out.println("不好意思,目前没有学生信息可供查询,请回去重新选择");
return; //针对无返回类型的函数,可以用return;结束函数
}
System.out.println("学号\t\t姓名\t年龄\t居住地"); // "\t"表示tab键
for(int i=0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getAddress());
}
}
public static void addStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
String id;
while(true) {
boolean flag = false;
System.out.println("请输入学号");
id = sc.nextLine();
for(int i=0; i < array.size(); i++) {
Student s1 = array.get(i);
if(s1.getId().equals(id)) {
flag = true;
}
}
if(flag == true) {
System.out.println("您输入的学号已被占用,请重新输入");
}
else {
break;
}
}
System.out.println("请输入姓名");
String name = sc.nextLine();
System.out.println("请输入年龄");
String age = sc.nextLine();
System.out.println("请输入地址");
String address = sc.nextLine();
//创建学生对象
Student s = new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
array.add(s); //将创建的对象添加到集合中
System.out.println("添加学生成功");
}
public static void deleteStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
boolean flag = false;
System.out.println("请输入需要删除学生的学号:");
String id = sc.nextLine();
for(int i =0; i < array.size(); i++) {
Student s = array.get(i);
if(s.getId().equals(id)) {
array.remove(i);
flag = true;
break;
}
}
if(flag == true) {
System.out.println("删除成功");
}
else {
System.out.println("要删除的学生信息不存在");
}
}
public static void updataStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
boolean flag = false;
System.out.println("请输入需要修改学生的学号:");
String id = sc.nextLine();
for(int i=0; i < array.size(); i++) {
Student s = array.get(i);
if(s.getId().equals(id)) {
flag = true;
System.out.println("请输入学生新姓名:");
String name = sc.nextLine();
System.out.println("请输入学生新年龄:");
String age = sc.nextLine();
System.out.println("请输入学生新地址:");
String address = sc.nextLine();
s.setName(name);
s.setAge(age);
s.setAddress(address);
break;
}
}
if(flag) {
System.out.println("修改成功");
}
else {
System.out.println("输入的学号不存在");
}
}
}