- 一、java基础
- 二、数据类型(八大基本数据类型)
- 三、 基本运算符
- 四、包机制
- 五、生成JavaDoc
- 六、流程控制
- 八、数组
- 九、面向对象
- 十、集合
- 10.1 集合类体系结构
- 10.2 Collection的创建和使用
- 10.5 Collection集合的使用步骤
- 10.6 Collection使用学生对象来存储
- 10.7 List集合的概述和特点
- 10.8 List的特殊方法
- 10.10 列表迭代器
- 10.11 增强for循环
- 10.12 List的三种遍历方式
- 10.13 常见数据结构之栈
- 10.14 常见数据结构之队列
- 10.13 常见数据结构之数组
- 10.14 常见数据结构之链表
- 10.15 List集合子类特点
- 10.16 LinkedList集合的特有功能
- 10.17 set集合概述和特点
- 10.18 哈希值
- 10.18 HashSet集合概述和特点
- 10.19 HashSet集合保证元素唯一性-源码解析
- ">

- 10.20 常见数据结构之哈希表
- 10.21 HashSet集合存储学生对象并遍历
- 10.21 linkedHaset集合概述和特点
- 10.22 treeSet集合概述和特点
- 10.23 自然排序Comparable的使用
- 10.21 比较器Comparable的使用
- 十一、泛型
- 十二、Map
一、java基础
1.1 java关键字
1.2 标识符
二、数据类型(八大基本数据类型)
2.1 什么是字节

package day1;public class demo1 {public static void main(String[] args) {// 八大基本数据类型int age =22;long ll = 222232323232L;short sht ='a';// String name= "阿飞";float scope = 22.2F;double saly = 22.1;boolean isTrue = true;char chs = 'A';byte b = 123;}}
2.2 类型转换
2.3 变量
2.4 常量
三、 基本运算符

- 三元运算符 条件 ?x:y
四、包机制
五、生成JavaDoc
5.1 cmd生成
javadoc -encoding UTF-8 -charset UTF-8 Doc.java5.2 idea生成
详情链接:https://blog.csdn.net/qq_29347295/article/details/78635861
六、流程控制
6.1 scanner对象


package day1;import java.util.Scanner;public class ScannerTest {public static void main(String[] args) {//获取用户键盘的输入Scanner scanner = new Scanner(System.in);// 拿到用户输入的数据String str =scanner.nextLine();System.out.println(str);// 关闭输入流scanner.close();}}
6.2 scanner进阶(计算数字之和)
package day1;import java.util.Scanner;public class ScannerT {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int sum = 0;int num = 0;// 计算树数字之和// 判断用户是不是数字,如果不是返回结果while (scanner.hasNextInt()){int userin = scanner.nextInt();num+=userin;sum++;}System.out.println(sum);System.out.println(num);}}
6.3 顺序结构
6.4 if单选择结构
6.5 switch多选择结构
6.6 while循环
6.7 do while循环

6.8 for循环(重点)

- 九九乘法表 ```java package day1;
public class Fortest { public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {for (int i = 1; i <= j; i++) {System.out.print(i + "*" + j + "=" + (j * i)+"\t");}System.out.println();}}
}
<a name="gNHyu"></a>#### 6.9 增强for循环<a name="efFTd"></a>#### 6.10 break continue<a name="WSUwA"></a>### 七、方法<a name="EexD2"></a>#### 7.1 什么是方法<a name="yVBPl"></a>#### 7.2 方法的定义<a name="VLhLM"></a>#### 7.3 方法的调用<a name="yJbO2"></a>#### 7.4 方法的重载<a name="YMyhh"></a>#### 7.5 命令行传参<a name="o6Q5l"></a>#### 7.6 可变参数```javapackage day1;public class demo03 {public static void main(String[] args) {test(1, 3, 4, 5, 56, 6);}/*** @不定长参数*/public static void test(int... i) {for (int j = 0; j < i.length; j++) {System.out.println(i[j]);}}}
7.7 递归

package day1;public class demo3 {public static void main(String[] args) {System.out.println(test(1));}//测试递归,求阶乘public static int test(int n){if (n==1){return 1;}else {return n*test(n-1);}}}
八、数组
8.1 数组的定义
8.2 数组声明创建
8.3 数组的三种初始化
8.4 数组的四个基本特点
8.5 数组边界
8.6 多维数组

package day1;public class demo4 {public static void main(String[] args) {// 多维数组// 遍历多维数组的值int[][] arr= {{1,3},{2,34,5},{4,3}};for (int i = 0; i < arr.length; i++) {for (int j = 0; j <arr[i].length ; j++) {System.out.println(arr[i][j]);}}}}
8.7 Arrays类详解
九、面向对象
9.1 思想
9.2 什么是面向对象
9.3 类和对象的关系
9.4 构造器详解

package demo2;public class Person {String name;int age;// 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义public Person(){}public Person(String name, int age) {this.name = name;this.age = age;}}
9.5 对象内存分析
9.6 封装

package demo2;public class Person {private String name;private int age;// 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义public Person(){}public Person(String name, int age) {this.name = name;this.age = age;}public void setName(String name){this.name =name;}public String getName() {return name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
9.7 继承
9.8 super
9.9 重写
9.10 多态


package demo3;public class Test {public static void main(String[] args) {Student s1 = new Student();Person s2 = new Student();s1.eat();}}
9.11 instance 引用类型转换
- 可以通过instance来判断2个类是否存在父子关系

package demo3;public class Test {public static void main(String[] args) {// 低转高自动转型// Student s1 = new Student();// Person person = s1;// 高转低强制转换Person person = new Student();Student s1 = (Student) person;s1.say();}}
9.12 抽象类
抽象类注意事项:
- 不能new这个抽象类,只能靠子类去实现它:约束!
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
- 抽象类有无参构造器
案例:
- 定义一个抽象类Person,里面有个抽象方法doSomeThing ```java package demo04;
public abstract class Person { // public abstract void doSomeThing(); }
2. 定义一个Student类继承Person,需要重写里面的所有方法```javapackage demo04;public class Student extends Person{@Overridepublic void doSomeThing() {System.out.println(5555);}}
9.13 接口的定义与实现
接口的注意事项:
- 约束
- 定义一些方法,让不同的人去实现~10>1
- 里面方法必须是抽象方法 public abstract
- 里面的属性都是静态常量 public static final
- 结构不能对实例化,结构没有构造方法
- 实现implements可以实现多个接口
- 必须重写接口中的方法
案例:
- 定义2个接口分别是PersonService和UserService,里面分别有鸽子的抽象方法 ```java package demo05;
public interface PersonService { void edit(); }
```javapackage demo05;public interface UserService {// 里面的属性都是静态常量 public static finalstatic final int NUM = 0;// 里面的方法 都是 public abstract 可以省略 没有方法体,可以有参数void add(String name);void delete(String name);void change(String name);void select(String name);}
定义一个实现类来实现PersonService和UserService,并且重写他们的全部方法 ```java package demo05; //必须重写接口所有的方法 public class UserServiceImpl implements UserService,PersonService {
@Override public void add(String name) {
}
@Override public void delete(String name) {
}
@Override public void change(String name) {
}
@Override public void select(String name) {
}
@Override public void edit() {
} }
<a name="0VMMf"></a>#### 9.14 异常<a name="eAR0Q"></a>#### 9.15 异常-体系架构<a name="ys71C"></a>#### 9.16 异常-ERROR<a name="bcjyF"></a>#### 9.17 异常-Exception<a name="AypgI"></a>#### 9.18 异常-捕获-抛出```javapackage demo6;public class TestException {public static void main(String[] args) {int a=1;int b=0;// 调用异常的方法需要接收异常try {new TestException().test(1, 3);} catch (Exception e) {e.printStackTrace();} finally {}try{// 可能出现异常的代码System.out.println(a/b);}catch (ArithmeticException e){// 定义多个异常,异常等级从小到大System.out.println("捕获到异常了ArithmeticException");}catch (Exception e){System.out.println("捕获到异常了ArithmeticExceptionException");}catch (Throwable e){System.out.println("捕获到异常了Throwable");}finally {System.out.println("无论什么情况都会执行");}}// 抛出异常的方法public void test(int a,int b)throws Exception{// 在方法中定义异常throw new ArithmeticException();}}
9.19 异常-自定义异常
9.19 异常总结
9.20 基本包装类型
9.21 integer类的概述和使用
9.21 包装类-int和String 的相互转换
9.22 包装类-自动装箱和拆箱
十、集合
10.1 集合类体系结构
import java.util.ArrayList; import java.util.Collection;
public class TestConnection { public static void main(String[] args) {
Collection<String> c1 = new ArrayList<>();c1.add("你好我是collection");c1.add("你好我是collection");c1.add("你好我是collection");System.out.println(c1);}
}
<a name="pcCco"></a>#### 10.3 Collection的常用方法<a name="MeaZW"></a>#### 10.4 Collection集合的遍历```javapackage demo7;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestConnection {public static void main(String[] args) {Collection<String> c1 = new ArrayList<>();c1.add("你好我是collection1");c1.add("你好我是collection2");c1.add("你好我是collection3");// 使用 iterator()// 返回此集合中的元素的迭代器Iterator<String> iterator = c1.iterator();// hasNext()// 如果迭代具有更多元素,则返回 true 。// 使用迭代器遍历里面的元素// next()// 返回迭代中的下一个元素。while (iterator.hasNext()) {// next()// 返回迭代中的下一个元素。String str = iterator.next();System.out.println(str);}}}
10.5 Collection集合的使用步骤
10.6 Collection使用学生对象来存储
- 定义一个学生类,里面有2个属性,并且有有参无参构造器和get,set方法 ```java package demo7;
public class Student { private String name; private int age;
public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
2. 主方法```javapackage demo7;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestCollection {public static void main(String[] args) {//定义一个Student类的集合Collection<Student> coll = new ArrayList<>();// 定义三个学生Student s1 = new Student("周杰伦", 12);Student s2 = new Student("林俊杰", 15);Student s3 = new Student("蔡徐坤", 16);//将三个学生添加到集合coll.add(s1);coll.add(s2);coll.add(s3);// 拿到集合的可迭代对象Iterator<Student> iterator = coll.iterator();// 遍历可迭代对象while (iterator.hasNext()){Student next = iterator.next();System.out.println(next.getName()+next.getAge());}}}
10.7 List集合的概述和特点

package demo7;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class TestList {public static void main(String[] args) {// 有序列表可重复List<String> list=new ArrayList<>();list.add("张飞");list.add("关羽");list.add("张飞");Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String next = iterator.next();System.out.println(next);}}}
10.8 List的特殊方法
- 遍历List的列表最使用 for > list.size()

package demo7;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class TestList {public static void main(String[] args) {// 有序列表可重复List<String> list=new ArrayList<>();list.add("张飞");list.add("关羽");list.add("张飞");// Iterator<String> iterator = list.iterator();// while (iterator.hasNext()){// String next = iterator.next();// System.out.println(next);////// }// 新增元素在下标1// list.add(1,"苟福成");// 删除指定下标元素// list.remove(2);// System.out.println(list);// 修改指定下标元素// list.set(1,"草上飞");// System.out.println(list);// 根据指定下表返回元素// String s = list.get(1);// System.out.println(s);// 遍历List可以使用get配合list.size()for (int i = 0; i <list.size(); i++) {System.out.println(list.get(i));}}}
10.10 列表迭代器
10.11 增强for循环
10.12 List的三种遍历方式
package demo7;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;public class TestThree {public static void main(String[] args) {List<Student> coll = new ArrayList<Student>();// 定义三个学生Student s1 = new Student("周杰伦", 12);Student s2 = new Student("林俊杰", 15);Student s3 = new Student("蔡徐坤", 16);coll.add(s1);coll.add(s2);coll.add(s3);// 使用迭代器遍历Iterator<Student> iterator = coll.iterator();while (iterator.hasNext()){Student stu = iterator.next();System.out.println(stu.getName());System.out.println(stu.getAge());}System.out.println("=====================================");// 使用for 下标遍历for (int i = 0; i < coll.size(); i++) {System.out.println(coll.get(i).getName());System.out.println(coll.get(i).getAge());}System.out.println("=====================================");// 使用增强for循环遍历for (Student student : coll) {System.out.println(student.getName());System.out.println(student.getAge());}}}
10.13 常见数据结构之栈
10.14 常见数据结构之队列
10.13 常见数据结构之数组
10.14 常见数据结构之链表
10.15 List集合子类特点
l
练习:
package demo7;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;public class TestLink {public static void main(String[] args) {// 查询快增删慢ArrayList<String> str = new ArrayList<>();str.add("张飞");str.add("刘备");str.add("关羽");System.out.println("====================================");// 迭代器遍历Iterator<String> striter = str.iterator();while (striter.hasNext()){String next = striter.next();System.out.println(next);}System.out.println("====================================");// 索引下标遍历for (int i = 0; i < str.size(); i++) {String s = str.get(i);System.out.println(s);}// 增强forfor (String s : str) {System.out.println(s);}System.out.println("====================================");// linklist查询慢增删快LinkedList<String> link = new LinkedList<>();link.add("周杰伦1");link.add("周杰伦2");link.add("周杰伦3");Iterator<String> linkiter = link.iterator();// 迭代器遍历while(linkiter.hasNext()){String next = linkiter.next();System.out.println(next);}// 索引下标遍历for (int i = 0; i < link.size(); i++) {String s = link.get(i);System.out.println(s);}// 增强for循环遍历for (String s : link) {System.out.println(s);}}}
10.16 LinkedList集合的特有功能
10.17 set集合概述和特点

import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class demo08 {public static void main(String[] args) {// 不可重复,不按顺序,没有索引遍历Set<String> strings = new HashSet<String>();strings.add("张飞1");strings.add("张飞2");strings.add("张飞3");strings.add("张飞4");strings.add("张飞5");strings.add("刘备");strings.add("张飞1");// 迭代器遍历Iterator<String> iterator = strings.iterator();while (iterator.hasNext()){String next = iterator.next();System.out.println(next);}System.out.println("========================");// 增强for遍历for (String string : strings) {System.out.println(string);}}}
10.18 哈希值

package demo08;public class TestHash {public static void main(String[] args) {System.out.println("你好".hashCode());//652829System.out.println("中国".hashCode());//642672}}
10.18 HashSet集合概述和特点
10.19 HashSet集合保证元素唯一性-源码解析
10.20 常见数据结构之哈希表
10.21 HashSet集合存储学生对象并遍历

需要重写Student类hascode 和equsal方法
package demo08;import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//重写2个方法@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}}
主方法
package demo08;import java.util.HashSet;public class TestHashSet {public static void main(String[] args) {//不可重复,实现 姓名和 年龄相同 就算一个人,需要重新对象类的hashcode 和 equs方法HashSet<Student> students = new HashSet<>();Student student1 = new Student("张飞",21);Student student2 = new Student("刘备",22);Student student3 = new Student("关羽",23);// 重复的人员Student student4 = new Student("关羽",23);students.add(student1);students.add(student2);students.add(student3);students.add(student4);for (Student student : students) {System.out.println(student.getName()+student.getAge());}}}
10.21 linkedHaset集合概述和特点
10.22 treeSet集合概述和特点

package demo08;import java.util.TreeSet;public class TestTreeSet {public static void main(String[] args) {// 注意这里要使用引用类型包装类// 不可重复切有序TreeSet<Integer> integers = new TreeSet<>();integers.add(1);integers.add(22);integers.add(15);integers.add(30);integers.add(15);for (Integer integer : integers) {System.out.println(integer);}}}
10.23 自然排序Comparable的使用

- 主方法 ```java package demo08;
import java.util.TreeSet;
public class TestTreeSet { public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<Student>();Student zhoujielun = new Student("zhoujielun", 22);Student wangfei = new Student("wangfei", 32);Student xiaofeifei = new Student("xiaofeifei", 12);Student goufucheng = new Student("goufucheng", 52);treeSet.add(zhoujielun);treeSet.add(wangfei);treeSet.add(xiaofeifei);treeSet.add(goufucheng);for (Student student : treeSet) {System.out.println(student.getName()+":"+student.getAge());}}
}
- 泛型如果为类,那么这个类必须实现Comparable接口,并且重写compareTo方法```javapublic class Student implements Comparable<Student> {@Overridepublic int compareTo(Student o) {return -1;}}
返回值为 -1 > 1 分别代表: -1 :对存储的数据倒着打印 0 :只会存储一个元素 1:对存储的数据正着打印
package demo08;import java.util.Objects;// 需要实现Comparablepublic class Student implements Comparable<Student> {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//重写2个方法@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic int compareTo(Student o) {// this 代表传入的 o代表上一个对像 2个进行对比/*** zhoujielun22-------->zhoujielun22* wangfei32-------->zhoujielun22* xiaofeifei12-------->zhoujielun22* goufucheng52-------->zhoujielun22* goufucheng52-------->wangfei32* xiaofeifei:12* zhoujielun:22* wangfei:32* goufucheng:52*/int num = this.age - o.age; //此处根据年龄排序 规则是 数值越大就第最后一个输出// int num = this.age - o.age;此处根据年龄倒叙System.out.println(this.getName()+this.getAge()+"-------->"+o.getName()+o.getAge());// 年龄相同时按照字母排序 ,否则添加不上int resutlt = num==0?this.name.compareTo(o.name):num;System.out.println(resutlt);return resutlt;}}
10.21 比较器Comparable的使用

package demo09;import java.util.Comparator;import java.util.HashSet;import java.util.TreeSet;public class TestHashset {public static void main(String[] args) {//使用匿名内部类 可以省去实现 Comparator接口TreeSet<Student> treeSet= new TreeSet<Student>(new Comparator<Student>() {@Override// 重写 Comparator对比方法public int compare(Student o1, Student o2) {int num= o1.getAge()-o2.getAge();int result = num==0?o1.getName().compareTo(o2.getName()):num;return result;}});Student zhoujielun = new Student("zhoujielun", 22);Student wangfei = new Student("wangfei", 32);Student xiaofeifei = new Student("xiaofeifei", 12);Student goufucheng = new Student("goufucheng", 52);Student helen = new Student("helen", 52);treeSet.add(zhoujielun);treeSet.add(wangfei);treeSet.add(xiaofeifei);treeSet.add(goufucheng);treeSet.add(helen);for (Student student : treeSet) {System.out.println(student.getName()+":"+student.getAge());}}}
十一、泛型
11.1 泛型的概述
11.2 泛型类
package demo09;import obj.Testconstor;//泛型类public class TestGeneric<T> {private T t;public T getT() {return t;}public void setT(T t) {this.t = t;}}
11.3 泛型方法
package demo09;import obj.Testconstor;//泛型方法public class TestGeneric {public <T> void getN(T t){System.out.println(t);}}
11.4 泛型接口
package demo10;public interface UserService<T> {void add(T t);}----实现接口package demo10;public class UserServiceImpl<T> implements UserService<T>{@Overridepublic void add(T t) {}}
11.5 类型通配符
十二、Map
12.1 map的概述和使用

package demo12;import java.util.HashMap;public class TestHashMap {public static void main(String[] args) {// <k,v> k=键类型 v=值类型HashMap<Integer, String> map = new HashMap<>();map.put(1,"张飞");map.put(2,"张san");map.put(3,"张飞");System.out.println(map);}}
12.2 map的常用方法
12.3 map的值获取

package demo12;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set;public class TestHashMap {public static void main(String[] args) {// <k,v> k=键类型 v=值类型HashMap<Integer, String> map = new HashMap<>();map.put(1,"张飞");map.put(2,"张san");map.put(3,"张飞");// 根据键拿到值// System.out.println(map.get(1));// 拿到所有的键// Set<Integer> integers = map.keySet();// for (Integer integer : integers) {// System.out.println(integer);//// }// 拿到所有的values// Collection<String> values = map.values();// for (String value : values) {// System.out.println(value);//// }// 获取所有键值对对象的集合Set<Map.Entry<Integer, String>> entries = map.entrySet();for (Map.Entry<Integer, String> entry : entries) {System.out.println(entry);}}}
12.4 map的遍历方式一
// map集合遍历1// 首先获取所有的key,通过getkey 拿到valueSet<Integer> integers = map.keySet();for (Integer integer : integers) {String s = map.get(integer);System.out.println(integer+","+s);}
12.4 map的遍历方式二

// map 集合遍历2Set<Map.Entry<Integer, String>> entries = map.entrySet();for (Map.Entry<Integer, String> entry : entries) {Integer key = entry.getKey();String value = entry.getValue();System.out.println(key+":"+value);}
12.5 map的遍历学生对象
package demo12;import java.util.HashMap;import java.util.Map;import java.util.Set;public class TestHashMapStu {public static void main(String[] args) {//Student student1 = new Student("张飞",21);Student student2 = new Student("刘备",22);Student student3 = new Student("关羽",23);HashMap<Integer, Student> map = new HashMap<>();map.put(1,student1);map.put(2,student2);map.put(3,student3);//方式一遍历Set<Integer> integers = map.keySet();for (Integer integer : integers) {Student student = map.get(integer);System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());}System.out.println("============================================");Set<Map.Entry<Integer, Student>> entries = map.entrySet();for (Map.Entry<Integer, Student> entry : entries) {Integer integer = entry.getKey();Student student = entry.getValue();System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());}}}




