前言
在知乎上看到Java的第一阶段练手小项目就是学生管理系统 涉及的知识有:运行环境,关键字,数据结构,运算符,方法,条件结构,循坏结构,方法重载,数组
一、对象
涉及知识:对象与类中构造器的创建和调用 1.创建对象 格式:类名 对象名 = new 类名(); 范例:Student s = new Student(); 2.使用对象 使用成员变量: 格式:对象名.变量名 范例:s.name 针对这个成员变量我可以输出使用和赋值使用 使用成员方法: 格式:对象名.方法名() 范例:s.show() 用法:在其它类中调用自定义类成员变量或者成员方法时使用 代码示例: 创建一个学生类
package itheima_01;
public class Student {
String name;
int age;
public void show(){
System.out.println(name+","+age);
}
}
创建一个学生测试类(在此类中调用学生类中的变量与方法)
package itheima_01;
public class StudentText {
public static void main(String[] args) {
Student s = new Student();
s.name = "小明";
System.out.println(s.name);
s.show();
}
}
二、private关键字
涉及知识:基于类的访问权限 private关键字是相较于public关键字而言的。
- 被public修饰的方法是公用的,其他类都可调用
- 被private修饰的方法是私有的,是最严格的,只有当前类(当前JAVA文件)可以调用,其他的·类都不能调用,甚至继承当前类的子类都不能调用.
- private作为一种权限修饰符可以修饰成员(成员变量和方法),被private修饰的成员只在本类中才能访问(在其他类中不能直接调用)
作用:可以使用private实现封装 将属性和方法用private封装后表示,被封装的属性与方法只能在本类中使用,类外部不可见。为了提高程序的独立性,减少耦合度。 此时要想访问被封装的属性,必须提供提供相应的操作: 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰。 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰。
代码示例: 先创建一个学生类
package itheima_01;
public class Student {
private String name;
private int age;
public void show(){
System.out.println(name+","+age);
}
}
再创建一个学生测试类,尝试访问带了private的成员变量 可以看到这里提示出错了,在学生类中提供相应的get和set方法,就可以学生测试类中访问了 代码示例: 访问 代码示例: 现在就能访问了 除了用get和set方法可以在学生测试类中访问之外 还可以使用带参构造方法,直接创建带有属性的对象
public Student(String name,int age){
this.name = name;
this.age = age;
但是获取数据还是得用get方法 如果你不使用带参构造方法,系统会默认提供一个无参构造方法注释掉他也会允许你使用 一般的话,用了带参构造,系统将不提供无参构造方法,无论你是不是用,都建议手动写一个无参构造方法,两种方法你都可以使用
public Student(){
}
三、this关键字
格式;this.变量名 1.this修饰的变量用于指代成员变量 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量。 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量 2.什么时候使用this呢?解决局部变量隐藏成员变量时 3.this:代表所在类的对象引用 注意:方法被哪个对象调用,this就代表哪个对象 言多必失上代码:接着上面把name对应的set和get方法写完
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
给参数取名字讲究顾名思义好名字很重要 那么如果不看上面的代码,就不太好理解这个 String n, n是代表什么意思,其实它就是设置的名字再把它赋值给成员变量name嘛,n就代表设置的名字的形参,那何不把形参名字设置成name呢?我们试试! 可以看到这个输出的name不是我们设定的值而是默认值,是为什么呢? 因为在方法内定义的变量是局部变量 方法外定义的变量是成员变量
public void setName(String name){
name = name;
}
所以这两个name都指的是局部变量,成员变量没被赋值,就是默认值,那么如何才能不让它隐藏(盖住)成员变量呢? 我们可以用this修饰代表成员变量的那个name
public void setName(String name){
this.name = name;
}
我们再试一次 这次就行啦!
四、ArrayList(集合基础)
- 它不属于基础包lang下的类,所以要手动导入(IDEA可以自动导入)
- 它提供了一种储存空间可变的储存模型,储存的数据容量可以发生变化
- ArrayList:
可调整的数组实现 :是一种特殊的数据类型,泛型。 用法:在出现E的地方我们使用引用数据类型替换即可 举例:ArrayList,ArrayList 代码示例:(创建与添加) 删除指定元素,返回删除是否成功 没有这个元素就会返回false,不会报错 删除指定索引处的元素,返回被删除的元素 索引处不存在元素就会报错 后面相关功能不在演示
五、储存字符串并遍历
需求:创建一个字符串的集合,储存3个字符串元素,使用程序实现在控制台遍历该集合 思路:1:创建集合对象 2:往集合中添加字符串对象 3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现 4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现 5:遍历集合的通用格式
for(int i=0;i<集合对象.size();i++){
集合对象.get(i)就是指定索引处的元素
进一步需求: 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合(学生类用的是前面的,有无参构造和有参构造以及相应的set和get方法) 再进一步需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合学生的姓名和年龄来自于键盘录入 思路:1:定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型 2:创建集合对象 3:键盘录入学生对象所需要的数据 4:创建学生对象,把键盘录入的数据赋值给学生对象的成员变量 5:往集合中添加学生对象 6:遍历集合,采用通用遍历格式实现
package itheima_01;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListText {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄:");
String age = sc.nextLine();
Student s = new Student();
s.setName(name);
s.setAge(age);
array.add(s);
}
}
但问题是这只是一个学生的,录入三个就需要重复三次, 为了提高代码的复用性,我们用方法来改进程序 两个明确: 返回值类型:void 参数:ArreyListarray
package itheima_01;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListText {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<>();
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 static void addStudent(ArrayList<Student>array) {
Scanner in = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = in.nextLine();
System.out.println("请输入学生年龄:");
String age = in.nextLine();
Student s = new Student();
s.setName(name);
s.setAge(age);
array.add(s);
}
}
总结
1.除了ArrayList用法繁杂了一点其他还好 主要掌握学会使用方法进行封装,可以大大提高代码的复用性和效率。 2.重点理解构造对象和构造方法的使用。 3.掌握了这一些知识之后,写一个简单的学生管理系还是可以的如果上面太乱,就看一下文档吧,这个整洁一点 https://kdocs.cn/l/spjyFtBvDYG5?f=111 [文档] day09-ArrayList集合&学生管理系统.pdf
|