黑马程序员技术交流社区

标题: javaEE12期技术贴:学习总结 [打印本页]

作者: yangchai    时间: 2018-4-2 00:33
标题: javaEE12期技术贴:学习总结
简单技术分享
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.方法中参数传递
                形式参数:用于接收实际数据的变量
                实际参数:实际参与运算的变量
                方法参数为基本类型时:
                        形式参数的改变不影响实际参数
                方法参数为引用类型时:
                        形式参数的改变直接影响实际参数
总结
虽然只短短的学习了十来天,但自己在作业方面还是坚持独立完成,如果上面的分享有错误,欢迎大家的指正,谢谢可爱的读者们!!!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2