简单技术分享
1. 独立自主编写学生管理系统并附有运行调试过程
1.1 Student类的编写
package com.itheima;
public class Student {
//成员变量
private String id; //学号
private String name; //姓名
private String age; //年龄
private String address; //地址
//有参无参构造方法
public Student() {
}
public Student(String id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
//调用setter,getter方法传入参数及提供对外获取数据接口
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
1.2 主程序的编写
package com.itheima;
import java.util.ArrayList; // ArrayList调用对象导包
import java.util.Scanner; // Scanner调用对象导包
public class Manager {
1.2.1 主方法的编写
//主方法
public static void main(String[] args) {
ArrayList<Student> str = new ArrayList<Student>();
Scanner sc = new Scanner(System.in);
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("请输入你的选择");
String selectNumber = sc.nextLine();
switch (selectNumber) {
case "1":
findStudent(str);
break;
case "2":
addStudent(str);
break;
case "3":
deleteStudent(str);
break;
case "4":
setStudent(str);
break;
case "5":
default:
System.out.println("退出系统成功");
System.exit(0);
}
}
}
主方法运行调试:
图1 主方法运行结果
注意事项: switch语句中,当输入其他数字的时候需要作出提示!
1.2.2 查询信息方法的编写
//查询信息
public static void findStudent(ArrayList<Student> str) {
if (str.size() == 0) {
System.out.println("对不起,学生管理系统暂无信息,请选择其他操作");
}else {
System.out.println("学号\t\t姓名\t年龄\t地址");
for (int i = 0; i < str.size(); i++) {
Student s = str.get(i);
System.out.println(s.getId() +"\t"+ s.getName() +"\t"+ s.getAge() +"\t"+ s.getAddress());
}
}
}
查询信息运行调试:
图2 查询信息方法运行结果
注意事项:因为当前学生管理系统无任何信息,所以当输入1的时候需要作出提示:
:“对不起,学生管理系统暂无信息,请选择其他操作”!
1.2.3 添加信息方法的编写
//添加信息
public static void addStudent(ArrayList<Student> str) {
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的学号:");
String id = sc.nextLine();
boolean flag = false;
for (int i = 0; i < str.size(); i++) {
if (str.get(i).getId() == id) {
flag = true;
break;
}
}
if (flag) {
System.out.println("对不起,你输入的学号已存在,请重新输入:");
}else {
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(id, name, age, address);
str.add(s);
System.out.println("学生信息添加成功");
return;
}
}
}
查询信息运行调试:
图3 添加信息方法运行结果
注意事项:1. 当学生信息添加完成,需要输出提示: 学生信息添加成功!
2. 当再次输入1 选择查看学生信息时需要输出所以已存在的学生信息.
1.2.4 删除信息方法的编写
//删除信息
public static void deleteStudent(ArrayList<Student> str) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生学号:");
String id = sc.nextLine();
if (str.size() == 0) {
System.out.println("对不起,当前学生管理系统无任何信息");
return;
}else {
int index = -1;
for (int i = 0; i < str.size(); i++) {
if (str.get(i).getId().equals(id) ) {
index = i;
}
}
if (index == -1) {
System.out.println("对不起,你要删除的学生学号不存在,请重新选择:");
}else {
str.remove(index);
System.out.println("删除学生信息成功");
return;
}
}
}
删除信息运行调试1:
图4 删除信息方法运行结果1
注意事项:1. 当学生信息系统中无任何信息,选择3去删除学生信息时需要输出提示: 对不起,当前学生管理系统无任何信息! 并直接退出当前循环
删除信息运行调试2:
图5 删除信息方法运行结果2
注意事项:1. 当学生信息系统中无对应的学号时,选择3去删除学生信息时需要输出提示: 对不起,你要删除的学生学号不存在,请重新选择!并继续当前循环
2. 当学生信息系统中有对应学号时提示: 删除学生信息成功!并退出当前循环
1.2.5 修改信息方法的编写
//修改信息
public static void setStudent(ArrayList<Student> str) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生学号:");
String id = sc.nextLine();
if (str.size() == 0) {
System.out.println("对不起,当前学生管理系统无任何信息");
return;
}else {
int index = -1;
for (int i = 0; i < str.size(); i++) {
if (str.get(i).getId().equals(id) ) {
index = i;
}
}
if (index == -1) {
System.out.println("对不起,你要修改的学生学号不存在,请重新选择:");
}else {
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(id, name, age, address);
str.set(index, s);
System.out.println("修改学生信息成功");
}
}
}
}
修改信息运行调试:
图6 修改信息方法运行结果
注意事项: 1. 当学生信息系统中无对应的学号时,选择4去修改学生信息时需要输出提示: 对不起,你要修改的学生学号不存在,请重新选择!并继续当前循环
2. 当学生信息系统中有对应的学号时,选择4去删除学生信息时需要输出提示: 修改学生信息成功!并继续当前循环
2. 附上一些相关基础知识的总结
2.1 java基础知识
1.java概述
SUN公司创始人詹姆斯.高斯林(James Gosling)
2009年甲骨文(Oracle)收购SUN
2.Java实现跨平台需要依赖Java的虚拟机 JVM
JVM是java虚拟机,不同平台(操作系统:Windows,Linux,Mac)有自己的虚拟机
JRE:JVM+类库
JDK:JRE+JAVA的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
3.常用dos命令
d: 回车 盘符切换
dir:列出当前目录下的文件以及文件夹
cd:进入指定目录
cd..:单步回退
cd\:回退到根目录
cls:清屏
exit:退出dos命令行
编译源代码:javac 源文件名.java
运行class:java HelloWorld
4.配置环境变量
定义:保证javac和java命令在任意目录下能够访问
JAVA_HOME添加变量值:JDK安装目录
在path环境变量前面添加:%JAVA_HOME%\bin;
5.注释
定义:解释说明程序的文字
单行注释://注释文字
多行注释:/* 注释文字 */
文档注释:/** 注释文字 */
作用:解释说明程序,帮助我们调试错误
6.关键字
定义:被Java语言赋予特定含义的单词
特点:字母全部小写,代码编辑器对关键字有特殊的颜色标记
定义数据类型的关键字:class,interface,byte,short,char,int,long,float,double,boolean,void 等
定义数据类型值得关键字:true,false,null 等
7.常量
定义:程序执行过程中其值不可以发生改变的量
分类:
字符串常量:用双引号括起来的内容(“HelloWorld”)
整数常量:所有整数(12,-23)
小数常量:所有小数(12.34)
字符常量:单引号括起来的内容(‘a’,’A’,’0’)
布尔常量:只有true和false
空常量:null
8.变量
定义:程序执行的过程中在某个范围内其值可以发生改变的量,内存中的一小块区域
格式:数据类型 变量名 = 初始化值
注意:整数默认int类型,定义long类型时要在后面加L
浮点数默认double类型,定义float类型时要在后面加F
变量未赋值,不能直接使用
变量只在所属范围有效,变量在哪对大括号内就属于哪对大括号
9.计算机存储单元
最小信息单元叫:位(bit)
最小的存储单元叫:字节 B
10.数据类型
基本数据类型 四类八种:
整数类型:byte,short,int,long
浮点类型:float,double
字符型:char
布尔型:boolean
引用数据类型:
类:class
接口:interface
数组:[]
数据类型转换:
隐式数据类型转换:先将取值范围小的数据类型提升为大的,再运算
强制类型数据转换:
格式:b = (byte)(a + b)
注意事项:若超出被赋值数据类型取值范围得到的结果会有不同
11.标识符
作用:给包,类,方法,变量等起名字
组成规则:由字符(字母数字),下划线_,美元符$组成(中文字符)
注意事项:不能以数字开头,不能是java中的关键字
命名规则:见名知意
包:域名倒过来,要求所有的字母小写
类或者接口:每个单词首字母大写
方法或者变量:第二个字母开始首字母大写
常量:所有字母大写,多个单词中间用下划线_区分
2.2 Eclipse软件的使用
1.Eclipse基本操作
创建Java项目:
创建包:
创建类:
编写代码:
编译:
运行
2.Eclipse常用辅助键和快捷键
内容辅助键 alt+/
单行注释:选中内容,ctrl+/
多行注释:选中内容,ctrl+shift+/, ctrl+shift+\
格式化:ctrl+shift+f
3.运算符
定义:对常量和变量进行操作的符号称为运算符
常用运算符:
算数运算符:
+ - * / % ++ --
注意事项:如果++或者--在变量的后面,先拿变量参与操作,后变量做++或者--
赋值运算符:
基本基本的赋值运算符:=
扩展的赋值运算符:+= -= *= /= %=
关系运算符:
== != > >= < <=
关系运算符结果都是boolean型:true false
逻辑运算符:
&& || ^ ! (& |)
注意事项:一般用于连接boolean类型的表达式或者值
&&具有短路效果:左边是false,右边不执行
||具有短路效果:左边是true,右边不执行
三元运算符:
格式:(关系表达式) ? 表达式1:表达式2
4.表达式
定义:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式
不同类型的表达式:不同运算符连接的式子体现的是不同类型的表达式
5.基本运算总结
字符参与运算:其实是拿该字符对应的数值来操作 'a' 97; 'A' 65; '0' 48
字符串参与运算:其实是字符串拼接
6.键盘录入
导包(位置放到class定义的上面):import java.util.Scanner
创建对象:Scanner sc = new Scanner(System.in)
接收数据:int x = sc.nextInt()
2.3 基本循环语句
1.流程控制
顺序结构:是程序中最简单最基本的流程控制:从左到右,从上到下
选择结构:if,switch
循环结构:for,while,do{} while()
2.if语句
格式1: if(关系表达式) {
语句体
}
格式2: if(关系表达式) {
语句体1;
}else {
语句体2;
}
格式3: if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
3.switch语句
格式:switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
表达式的取值:
byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是String
4.for循环语句
格式:for(A初始化语句;B判断条件语句;C控制条件语句) {
D循环体语句;
}
执行顺序:A-->B-->D-->C B-->D-->C循环
5.while循环语句
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
6.do…while循环语句
基本格式:
do {
循环体语句;
}while((判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
7.三种循环区别
do…while循环至少会执行一次循环体
for循环和while循环只有在条件成立的时候才会去执行循环体
for循环语句和while循环语句的小区别:
使用区别:控制条件语句所控制的那个变量,在for循环结束后
就不能再被访问到了,而while循环结束还可以继续使用
原因:for循环结束,该变量就从内存中消失,能够提高内存的使用效率
8.控制循环语句
控制跳转语句break:
使用场景:在选择结构switch语句中,在循环语句中
作用:跳出单层循环
控制跳转语句continue:
使用场景:在循环语句中
作用:退出本次循环,继续下次循环
2.4 数组相关知识
1.产生整数随机数
导包:import java.util.Random
创建对象:Random r = new Random()
获取随机数:int number = r.nextInt(10)
范围:[0,9]
2.数组
定义:数组是存储同一种数据类型多个元素的容器
格式:数据类型[] 数组名 (推荐使用)
数据类型 数组名[]
数组初始化:
定义:是为数组中的数组元素分配内存空间,并为每个数组元素赋值
数组必须先初始化,然后才能使用
数组初始化方式:
动态初始化:
格式:数据类型[] 数组名 = new 数据类型[数组长度]
静态初始化:
初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}
简化格式:数据类型[] 数组名 = {元素1,元素2,...}
3.JVM内存划分
栈:存储局部变量
堆:存储new出来的东西
方法区:存储.class解码文件,main方法和调用的方法
本地方法区:和系统相关
寄存器:给CPU使用
4.new出来对象的数据默认值
byte,short,int,long:0
float,double:0.0
char:'\u0000'
boolean:false
引用类型:null
5.数组使用的两个小问题
数组越界异常:ArrayIndexOutOfBoundsException:
产生的原因:访问了不存在的索引元素
空指针异常:NullPointerException:
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素
6.二维数组
定义:二维数组其实就是一个元素为一维数组的数组
定义格式:
数据类型[][] 数组名(推荐)
数据类型 数组名[][]
数据类型[] 数组名[]
初始化方式:
数据类型[][] 变量名 = new 数据类型[m][n];
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化格式:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}}
2.5 方法的使用
1.方法(函数)
定义:方法就是完成特定功能的代码块
格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
返回值类型:用于限定返回值的数据类型
方法名:一个名字,方便我们调用方法
参数类型:用于接收调用方法时传入的数据的类型
参数名:用于接收调用方法时传入的数据的变量
return:结束方法,把返回值带给调用者
注意事项:
两点需要明确:
返回值类型:明确功能结果的数据类型
参数列表:明确有几个参数,以及参数的类型
2.方法调用
有明确返回值的方法调用:
单独调用,没有意义
输出调用,有意义,但是不够好,因为我不一定非要把结果输出
赋值调用,推荐方式
void:只能单独调用
3.方法重载
特点:与返回值类型无关,只看方法名和参数列表
在调用时通过参数列表的不同来区分同名方法
4.方法中参数传递
形式参数:用于接收实际数据的变量
实际参数:实际参与运算的变量
方法参数为基本类型时:
形式参数的改变不影响实际参数
方法参数为引用类型时:
形式参数的改变直接影响实际参数
总结
虽然只短短的学习了十来天,但自己在作业方面还是坚持独立完成,如果上面的分享有错误,欢迎大家的指正,谢谢可爱的读者们!!!
|
|