# java作业 **Repository Path**: superliliya/learning-java ## Basic Information - **Project Name**: java作业 - **Description**: 从零开始学java写的作业,这里的作业都会以日期的形式来记录 而且一天都会比一天难。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2020-09-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## java作业 1. javaSE java基础 2. javaEE 基于浏览器的企业级应用开发 3. javaME 嵌入式可移动设备应用开发 * JDK 组成 * jre (Java Runtime Environment) java运行环境 * 类库 工具类 * 开发者工具包 * java运行机制 * 编写一个后缀名为java的文件 * 使用java编译器进行编译 * 生成一个后缀为class的字节码文件 * 通过解释执行器进行解释 Hello.java ```java public class 类名{ public static void main(String[] args){ System.out.println("Hello World!"); } } ``` ``` 制表符 \t 换行 \n ``` ------------------------ ### 二 > 标识符:凡是需要自己取名的地方我们就叫做标识符 标识符只能有$ _ 数字和字母组成,但是不能以数字开头 不能使用java关键字和保留字 > 命名规则 **具体可以参考阿里巴巴开发手册** 1. 类名首字母大写 例如 *Hello* 2. 方法名、参数名、变量名首字母小写,单词开头大写。其余的字母是小写 例如 *hello* 3. 包名是域名倒着写,并且是全部都是小写。例如 com.*hunan.dao* 4. 常量名全部大写,多个单词使用下划线分割 例如 *PI_VALUE* > 基本数据类型 基本数据类型有三种 **数字类型、字符类型、布尔类型** 1. 数字类型 byte、short、int、long、float、double 2. 字符类型 char 3. 布尔类型 boolean 这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean -------------------------- ### 三 > 注释: 1. 单行注释 //这个是一行注释 2. 多行注释 /*这个是多行*/ 3. 文档注释 /**这个是文档注释 */ > 二进制转换 > 变量的声明和使用 int a = 1; //例如声明一个变量,并将变量赋值一个1 int b,c,d = 2; //错误的例子 //这里的b,c都没有被赋值,如果直接打印的话,会直接报错。 > 自动装箱和拆箱 例子: ```java int a = 10; long b = a; //这个就是自动装箱 //错误的写法 long c = 10; int d = c; //这个会报错 //拆箱 long c = 10; int d = (int)c; ``` Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。 为啥把缓存设置为[-128,127]区间?(参见issue/461)性能和资源之间的权衡。 **注意:两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。** > 运算符 这个很简单。所以就讲两个特殊的自增运算符(++)和自减运算符(--)。 例如,当 b = ++a 时,先自增(自己增加 1),再赋值(赋值给 b);当 b = a++ 时,先赋值(赋值给 b),再自增(自己增加 1)。也就是,++a 输出的是 a+1 的值,a++输出的是 a 值。用一句口诀就是:**“符号在前就先加/减,符号在后就后加/减”**。 > 三元表达式 (布尔类型) ? 如果判断为真的值:如果判断为假的值; 例如:求两个数之间的最大值 ``` int a = 10,b = 20; System.out.println(a>b?a:b); ``` > 选择结构 **区间判断选择if,等值判断选择switch** 一般的写法 ``` if(布尔类型){ //逻辑代码 } //switch与if不同,这个 //这个括号里面可以填 String,enum,int,char,short,byte,以及他们的包装类,但是,如果是填long类型和浮点类型的话,就会报错 switch(){ case: break; } ``` > 循环结构 循环结构有三种 for循环、while循环、do-while循环 固定次数用for循环,先判断后执行。 do是至少执行一次,先执行后判断 while是先判断后执行,do-while和while是次数不固定,看条件 -------------------------------------- **方法** 语法 ``` 访问修饰符 返回类型 方法名 (参数列表){ //方法体 return 返回类型; } public void hi(){ System.out.println("Hi"); } ``` break 跳出循环。 continue 结束本次循环,进入下一次循环。 return 结束整个方法体。 System.exit(0); 正常的退出虚拟机 System.exit(1); 异常的终止虚拟机 ----------- **数组** ```java 数据类型[] 变量名 //定义数组 int list[]; //初始化数组 int list[] = new int[10]; list[0] = 1; list[1] = 2; ........ int list[] = {1,2,3,4,5}; //数组排序 Arrays.sort(); //数组打印 Arrays.toString(list); //多维数组,本质还是数组套的数组 int list1[][] = new int[10][10]; ``` ----------------------------- **面向对象** 面向对象的三大特征 封装、继承、多态 1. 封装:将属性私有化,然后提供公有的方法来访问。 2. 继承:java不允许多继存,只允许单继存,继承使用`extends`关键字 3 .重载和重写 在用一个类中,方法名相同,参数项不同。就是方法重载 重写,在子类中,方法名相同,方法参数项也相同 4. 构造方法: 方法名和类名相同,无返回值 5. this: 当前对象的引用,解决成员变量和局部变量重名的问题。 6. super:解决子类和父类属性方法名相同重名的问题 抽象类: 使用`abstract`关键字,抽象类不能被实例化,抽象方法不能拥有主体。 抽象方法只能被重写。抽象类可以拥有普通方法; 接口: 使用`interface`关键字,可以多实现。接口同样的,也不能被实例化, (在java9以后接口可以有普通方法),可以使用`default`修饰的普通方法; 可以使用 instanceof 判断是否实现了或者继承了该类 集合: 1. List: 1. ArrayList //普通的队列 2. LinkedList //双端队列 3. Vector 2. Map: 1. HashMap 2. HashTable 迭代器 ```java ArrayList list = new ArrayList<>() {{ add(1); add(1); add(1); add(1); }}; Iterator iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } //其他迭代器 ``` foreach循环 for(值类型 变量名: 集合){ } ----------- **异常** try: 将所有可能会出现的异常代码放在这里面 catch : 捕获异常类型 finally: 最终执行的代码。 **常用API** 1. date 2. calendar 3. Math 4. Random 5. String 6. StringBuffer 7. StringBuilder ---------- **log4j** 六种隔离级别 1. debug 2. error 3. warn 4. info 5. trace 6. fatal --------- **IO流** 1. 字节流 1. InputStream //最主要的方法是read 2. OutputStream //最主要的方法是writ 还有flush 2. 字符流 1. Reader 2. Writer File类 主要的方法是 exists(); createNewFile(); POI 操作使用excel POI操作具体看我blog笔记 https://blog.csdn.net/zhihu_0/article/details/109180191 通过 https://gitee.com/superliliya/learning-java 这个网址来访问 更加详细的java基础知识 https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/basis/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md#11-java-%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%B8%B8%E8%AF%86