两种方法的区别及该注意的问题;
第一种:
package com.heime.ArryList;
import com.heime.Domain.Student;
import java.util.ArrayList;
import java.util.Scanner;
public class Demo3reredo {
/* 需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
步骤方法:1,定义一个学生类
2,创建集合对象
3,键盘录入学生数据
4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
5,往集合中添加学生对象
6,遍历集合
*/
public static void main(String[] args) {
// 2,创建集合对象
ArrayList<Student> list = new ArrayList<>();
ArrylistMethod(list);
ArrylistMethod(list);
ArrylistMethod(list);
//需要存储几个学生就要,引用几次ArrylistMethod方法
// 6,遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu0 = list.get(i);
System.out.println(stu0.getName() +"..." + stu0.getAge());
}
}
public static void ArrylistMethod(ArrayList<Student> list) {
// 3,键盘录入学生数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
// 4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
Student stu1 = new Student(name,age);
stu1.setName(name);
stu1.setAge(age);
// 5,往集合中添加学生对象
list.add(stu1);
}
}
第二种:
package com.heime.ArryList;
import com.heime.Domain.Student;
import java.util.ArrayList;
import java.util.Scanner;
public class Demo3Redo {
/* 需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
步骤方法:1,定义一个学生类
2,创建集合对象
3,键盘录入学生数据
4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
5,往集合中添加学生对象
6,遍历集合
*/
public static void main(String[] args) {
// 2,创建集合对象
ArrayList<Student> list =new ArrayList<>();
Student stu2 = ArryListMethod();
Student stu3 = ArryListMethod();
Student stu4 = ArryListMethod();
// 5,往集合中添加学生对象
list.add(stu2);
list.add(stu3);
list.add(stu4);
// 6,遍历集合
for (int i = 0; i < list.size(); i++) {
Student sss = list.get(i);
System.out.println(sss.getName() +"..." +sss.getAge());
}
}
public static Student ArryListMethod() {
// 3,键盘录入学生数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
/* nextline与nextInt配合使用,Nextline将不会有键盘录入的机会。
但我使用了nextline来接收字符串并没有出现异常。
*/
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
// 4,创建学生字符串,然后将键盘录入的数据赋值给学生对象的成员变量
Student stu1 = new Student(name,age);
return stu1;
}
}
第二种方式更符合面向对象的开发方式,ArryListMethod 只负责对象的创建,职责较为清晰。
首先:方式1的 第4步,代码有重复的
// 下面这行代码在创建对象的同时 已经为 对象 赋值了 name 和 age
Student stu1 = new Student(name,age);
// 以下两行代码 依然是在给对象赋值,是重复的
stu1.setName(name);
stu1.setAge(age);
这两种方式的区别:
综合来看,方式2是适合人的正常思维来编写的。方式1很粗糙,作为编程人员来说,每个方法有每个方法的功能,比如方式2中的ArryListMethod();方法,该方法就是返回给我一个对象,至于我要怎么操作我得到的对象,那是我下一步要做的事情。而方式1中的该方法就直接即生成对象又直接加入集合中显得很没有逻辑性,不适合后续的业务扩展。比如说我这个集合只加age<50的对象,我只需要在main()方法中做个判断即可。