javaSE总结
1 java的历史 ???? 1991-至今? 詹姆斯-高斯林? SUN公司 ???? ORACLE 2009年 2 java的版本 ???? javaSE? java的标准桌面级开发 ???? javaEE? 企业级web开发 ???? javaME? 嵌入式开发 3 jdk的版本 ?? jdk1.0 - jdk11? 每半年一个版本? 每年的3月和9月 4 jdk 的安装和环境配置 ? jdk--开发者必须安装 ? jre--使用者安装 ? java_home:jdk的安装目录 ? javac:%java_home%/bin;? 可以在任意目录结构中,进入jdk的bin目录,方便的找出javac.exe和java.exe 5 数据类型 ???????? 基本类型 ???????? byte,short,int,long,char,float,double,boolean?? ???????? 引用类型 ?????????????????????????? 类,接口,数组,枚举 6 运算符 ????????? 算术运算符,关系运算符,逻辑运算符, 赋值运算符,位运算 7 流程语句 ?????????? 单分支? if ?????????? 双分支? if else ????????? 多分支 ?????? if.. else if.. else????? ?????? switch(){case..}?? 8 循环语句 ?? while(条件){ ???????????????? 循环体 ???????????????? 变量更新 ?? } ?? ?? do{ ?? }while(); ?? ?? for(初始值;范围值;变量更新){ ???? ???? 循环体 ?? } 9 方法 ?????? ?? 无参无返回 ?????? ?? 无参有返回 ?????? ?? 有参无返回 ?????? ?? 有参有返回 ?????? 形参:方法声明是时,形式上的参数,是一个局部变量 ?????? 实参:方法调用时,传递给方法实际有值的参数???? 10 数组 ??????? 概念:一个开辟了连续的空间的线性数据结构???? ??????? 特点:查询快,增删慢 ??????? 可以添加任意的数据类型? ?? 数组的基本操作 ??????? 增? 删? 改? 查 长度? 判断? 排序 ?????? 冒泡排序? 插入排序,选择排序,快速排序?????????? 11 面向对象编程? OOP? AOP(面向切面编程)?????? ?????? 类:类是一类事务的模板,把很多具有相同功能的对象抽象出来,描述为一个类 ?????? 对象:每一个类的具体的实例 ??????? 类是对象的抽象化,对象是类的实例化??? ? 类的主要组成 ????? 成员属性,成员方法,构造方法????? ????? 成员属性:修饰符? 数据类型? 变量名; ????? 默认值 ?????? ????? 整型:0 ?????? ????? 浮点型:0.0 ?????? ????? 布尔型:false ?????? ????? 引用类型:null ????? 变量的作用域 ???????? 局部变量:声明在方法中的变量,作用范围,只在本方法中 ???????? 成员变量 ?????????????????? 类变量(static),对象变量 ????? 内存位置 ?????????????? 堆: 对象变量?????????? ?????????????? 方法区:类变量 ????? 加载时机 ??????????????? 创建对象的时候,对象变量初始化? ?????????? ?????类被加载的时候,类变量就初始化 ????? 份数 ?????? ????? 对象变量,每一个对象各有一个 ?????? ????? 类变量,被每一个对象所共享??????????? ?????? ??????? ?? 成员方法 ?????????????? 修饰符? 返回值? 方法名(){ ?????????????? ???? } ?方法重载:overload ?? 1:同一个类 ?? 2:方法名相同 ?? 3:参数列表不同 ???? 3.1 参数个数 ???? 3.2 参数类型 ???? 3.3 参数顺序 ?????? 和返回值无关?????? ? 构造器 ??????? 修饰符? 类名(){ ??? ??? }?? ???????? 每一个类至少会有一个构造器,如果没有手动提供构造器,那么编译器会自动提供一个无参的构造器? ?? ?? ??????? 构造器没有返回值???? ??????? 构造器也可以重载 ??????? ??? public Student(){ ?????? this("张三"); ??? }???????????? ??? public Student(String name){ ?????? this("李四",20); ??? }?? ??? public Student(String name,int age){ ??? ??? } ?this:代表当前对象的引用 ?? 1:this可以调用成员属性 ?? 2:this可以调用成员方法 ?? 3:this可以调用构造方法 ?static的用法 ??????? 修饰变量:代表类变量,被所有的对象共享 ??????? 修饰方法:代表类方法 ??????? 修饰类 :静态内部类 ?? 细节 ????? 成员方法中,既可以直接访问成员变量,也可以访问类变量???????? ????? 静态方法中,只可以访问类变量?????? ???? 成员方法既可以直接调用成员变量,也可以调用类方法???????????? ???? 静态方法只可以调用类方法?????? 面向的3个特点 ???? 封装,继承,多态 ???? 封装:属性私有化,提供公开的get和set方法? 隐藏细节,公开接口 ???????????????? 属性的值是随着行为的变化而变化的?? ? 修饰符 ??? 访问修饰符 ???? private:类可见性 ???? default:类可见,包可见性 ???? protected:类可见,包可见,不同包的子父类 ???? public:项目可见 ??? 非访问修饰符?????? ??? static,final,? synchronized,native,transient??? ? 继承:单继承,继承链? extends ????????? 顶级父类:Object? ???????? 子类可以继承父类的属性和方法,私有的不能继承 ?? ?????? 修饰符 class 子类? extends 父类{ ?? ?? }???????????? ?????? 优点:提高了代码的复用性 ?????? 缺点:高耦合,低内聚???? 多态 : ???????? 父类 变量名 = new 子类()? 向上转型(父类的引用指向子类对象) ?? 多态的必要原则 ???? 1:继承 ???? 2:要有方法重写 ???? 3:向上转型????? 方法重写? override ? 1:子父类之间?? ? 2:方法名,参数列表,返回值相同 super:代表父类的引用 ? super.成员属性 ? super.成员方法 ? super(参数); 调用父类的构造函数 java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐示调用) 并且调用父类构造方法的语句必须是子类构造方法的第一条语句? 抽象类:就是为了被子类继承 ? 修饰符? abstract class 类名{ ? }? ?特点 ?????? ?1:可以有抽象方法 ?????? ?2:可以有实现方法 ?????? ?3:不可以创建对象 ?????? ?4:利用多态通过向上转型,创建子类对象 接口 interface ?? 修饰符? class 类名 implements 接口名{ ?? ?? } ?类与类 ????? 继承关系,单继承,有继承链 ?类与接口 ???? 实现关系,多实现 ?接口和接口 ???? 继承关系,多继承 ???? 抽象类与接口的区别? ? 变量 ??? 抽象类有,接口没有 ? 常量 ???? 抽象类有,接口有? public static final ? 成员方法 ???? 抽象类有,接口没有(jdk1.8之前没有)? ? 抽象方法 ???? 抽象类有,接口有 public abstract ? 构造器 ?? 抽象类有,接口没有? ?? ?final的用法 ? final修饰变量,表示常量,一旦被赋值,不可被修改? ? final修饰方法,表示这个方法不能被重写 ? final修饰类,表示是一个最终类,不能被继承(所有的方法不能被重写) ?异常 ? Throwable ? 子类 ??? Exception? 异常 ??? 编译时异常 ??? 运行时异常 RuntimeException ??? Error???? 错误 ??? ?处理异常 ?? 1:捕获异常 ???? try:尝试运行有可能会出错的代码 ???? catch:一旦代码出错,编译器生成一个异常对象,和catch中异常做匹配,匹配成功进入catch块,后面的代码正常执行 ???? finally:表示一定会执行,就算代码中有return,也会在return之前执行,除了虚拟机强制退出 System.exit(1); ?? 2:抛出异常?? ???? throws:在方法声明部分,抛出一个异常类,可以一次性声明多个异常 ?????????????????????????????????? 有可能会抛出异常 ???? throw ????????????????????????????????? 在方法体中,抛出一个异常对象,一定会抛出异常 ?? 3:自定义异常 ????? 1:继承Exception或者RuntimeException ????? 2:提供一个无参的,以及有参的构造函数?????? ????? ????? public class SexException extends Exception{ ????? ??????? public SexException(){ ???? ???????super(); ??????? } ??????? public SexException(String message){ ??????????? super(message); ??????? } ??????? ????? }??????????????????????? 常用类 ? 包装类 ?? Byte,Short,Integer,Long,Float,Double,Boolean,Character ?字符串 :String:是一个不可变的字符序列 ??? "abcde".substring(0,2) = "ab" ??? "abc".charAt(0) = 'a' ??? "abc".length() = 3 ??? "a,b,c".split(",") = ["a","b","c"] ??? "abc".indexof("a") = 0 ??? "abaca".replaceAll("a","*") = "*b*c*"; 字符串缓冲类 ???? StringBuffer:可变的字符序列? 同步 ???? StringBuilder: 可变的字符序列? 不同步 ?? 数学类:Math ?? random()? 0-1 之间的小数? 包括0,不包括1 ?? max(int a,int b); ?? min(int a,int b);? ?? ceil(10.123) = 11 ?? floor(10.123) = 10 ?? pow(10,3) = 1000? 次幂函数 ?日期类:java.util.Date ?? Date? date = new Date(); 获取当前系统时间 ?? getYear()+1900 ?? getMonth()+1 ?? getDate() ?? getDay() ?? getHours(); ?? getMinutes() ?? getSeconds()? ?? 日期转为字符串 ??? date.toLocalString(); ?日期转换类 DateFormat 子类? SimpleDateFormat ?DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ?Date? date = new Date(); ? //将日期转为字符串 ? String s = date.format(date); ? //将字符串转为日期 ? Date da = date.parse("1999-12-12"); ?日历类 Calendar ? Calendar ca = Calendar.genInstance(); ??? ca.get(Calendar.YEAR); 获取年 ??? ca.get(Calendar.MONTH); 获取月 ??? ca.get(Calendar.DATE); 获取日 大整型 BigInteger ? BigInteger bg = new BigInteger(String.valueof(Long.MAX_VALUE))??? ? bg = bg.add(new BigInteger("1"));? 加法 给long的最大值+1 大浮点型? BigDecimal ? BigDecimal bd = new BigDecimal(String.valueof(Double.MAX_VALUE))??? ? bd = bg.add(new BigDecimal("1"));? 加法 给double的最大值+1 文件类:File ? File file = new File("d://工具//a.txt");? ? file.createNewFile(); ? renameTo() ? delete(); 枚举:enum ?枚举里的变量默认的修饰符是public static final ?public enum Season(){ ??????????? 春,夏,秋,冬 ?}? ?Season.春 ?Season[] son = Season.values(); ?for(Season s:son){ ??? System.out.println(s.name) ?} 集合 ?? Collection ???? List ?????? ArrayList:底层是数组,查询快,增删慢,不同步 ?????? LinkedList:底层是链表,查询慢,增删快,不同步 ?????? Vector:底层是数组,查询快,增删慢,同步 ???? Set ?????? HashSet:底层是哈希表(数组+链表)查询快,增删快,不同步 ?????? LinkedHashSet:底层是哈希表+链表 查询快,增删快,不同步 ?????? TreeSet:底层是树结构,排序 ????????????? 2种排序方案 ?????????????? 1:自然排序,实现Comparable接口,重写comparTo() ?????????????? 2:比较器排序,实现Comparator接口,重写compare() ?? Map ????? HashMap:底层是哈希表(数组+链表)查询快,增删快,不同步 ????? TreeMap:底层是树结构,排序 ????????????? 2种排序方案 ?????????????? 1:自然排序,实现Comparable接口,重写comparTo() ?????????????? 2:比较器排序,实现Comparator接口,重写compare() ????? Hashtable:底层是哈希表(数组+链表)查询快,增删快,同步 ? List接口:有序(添加顺序和迭代顺序一致)且重复????? ? Set接口:无序且唯一 ? List接口的遍历方式 ??? 1:转数组? toArray ????? ArrayList ??? 2:size+get?? List的专有遍历方式 ???? for(int i = 0;i ?????? al.get(i); ???? } ??? 3:迭代器? Iterator it = al.iterator();? Collection的专有遍历方式 ??????? while(it.hasNext()){ ?????????? it.next() ??????? } ?? ??? 4:for-each--? 任何集合都可以 ???? for(String s:al){ ??????? s ???? } ?? ?? Map集合遍历方式 ???? 1:先找到所有的键吗,然后根据键获取值 ?????? Map ??????? Set ??????? for(String s:set){ ?????????? String value = map.get(s); ??????? } ???? 2:直接获取键值对? entrySet ?????? Set ??????? for(EntrtSet ????????? en.getKey(); 键 ????????? en.getValue(); 值 ??????? } ?集合的工具类:Collections ?????? ??? 添加? add() ?????? ??? 删除 remove() ?????? ??? 修改 ?????? ??? 排序 sort() ?????? ??? 二分搜索法:binarySearch()? 前提是先排序 IO流 ?? 字节流 ?? ??? OutputStream ????? FileOutputStream? 文件字节输出流 ????? BufferedOutputStream 缓冲字节输出流 ????? ObjectOutputStream 序列化流? 将对象流化(将java对象保存在文件) ??? InputStream ????? FileInputStream?? 文件字节输入流 ????? BufferedInputStream? 缓冲字节输入流 ????? ObjectInputStream?? 反序列化流:将文件中对象读取取java程序中 ?? 字符流???? ???? ??? Writer ????? OutputStreamWriter?? 字符输出转换流 ????? FileWriter?????????? 字符输出便捷流 ????? BufferedWriter?????? 字符输出缓冲流 ??? Reader ????? InputStreamReader??? 字符输入转换流 ????? FileReader?????????? 字符输入便捷流 ????? BufferedReader ????????? 字符输入缓冲流 ????? ???? //3层结构的流? ????? 1:缓冲流 ????? 2:转换流 ????? 3:字节流 ???? BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"))) ???? BufferedReader bw = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"))) ? 流拷贝文件 ??? 把d://工具/中国人.mp3 拷贝到当前项目 ????? BufferedInputStream bis = new BufferedInputStream("d://工具/中国人.mp3"); ????? BufferedOutputStream bos = new BufferedOutputStream("中国人.mp3");?? ????? ????? byte[] by = new byte[1024]; ????? int num = 0; ????? while((num = bis.read(by))!=-1){ ??????? bos.write(by,num); ????? } ????? ????? bos.close(); ????? bis.close(); ????? ???? 把d://工具/a.txt 拷贝到当前项目?? ?????? BufferedReader br = new BufferedReader("d://工具/a.txt"); ?????? BufferedWriter bw = new BufferedWriter("a.txt"); ?????? ?????? String line = null; ?????? while((line = br.readLine())!=null){ ???????? bw.write(line); ?? ??????bw.newLine(); ?????? } ?????? ?????? bw.close(); ?????? br.close(); ?序列化: ????? 需要实现序列化的类要实现Serializable 接口 ?? 方案1: ?? Student stu1 = new Student();?? ?? Student stu2 = new Student();? ?? ?? ObjectOutputStream oos = new ObjectOutputStream("Student.txt"); ?????? ?? oos.writerObject(stu1); ?????? ?? oos.writerObject(stu2); ?????? ?? oos.writerObject(null); //自定义结束标记 ?? oos.close(); ?? ?? ?? ObjectInputStream? ois = new ObjectInputStream("Student.txt"); ?? Object obj = null; ?? while((obj = ois.readObject())!=null){ ???? Student stu = (Student)obj ?? } ?? ois.close(); ?? ?? 方案2: ?? Student stu1 = new Student();?? ?? Student stu2 = new Student();? ?? ?? ArrayList ?? al.add(stu1); ?? al.add(stu2); ?? ?? ObjectOutputStream oos = new ObjectOutputStream("Student.txt"); ??? oos.writerObject(al); ?? oos.close(); ?? ?? ?? ObjectInputStream? ois = new ObjectInputStream("Student.txt"); ???? ArrayLis ???? for(Student stu:al){ ?????? stu ???? } ?? ois.close(); 多线程 ?? 实现方式 ??? 1:继承Thread类,重写run方法 ??? 2:实现Runnable接口,? 重写run方法 ? 启动方式1? 继承方案 ?? public class MyThread extends Thread{ ?? ???? @OverRide ???? public void run(){ ?????? ? 多线程 ???? } ???? ???? main(){ ?????? MyThread m1 = new MyThread(); ?????? MyThread m2 = new MyThread(); ?????? ?????? m1.setName("线程1"); ?????? m2.setName("线程2"); ?????? ?????? m1.start(); ?????? m2.start(); ???? ???? } ?? ?? ?? }?? ?? ?????? ? 启动方式2? 接口方式 ?public class MyThread implements Runnable{ ?? ???? @OverRide ???? public void run(){ ?????? ? 多线程 ???? } ???? ???? main(){ ?????? MyThread m1 = new MyThread(); ????? ????? Thread t1 =new Thread(m1,"线程1"); ????? Thread t2 =new Thread(m1,"线程2"); ???? ?????? t1.start(); ?????? t2.start(); ???? ???? } ?? ?? ?? } 线程声明周期 ? 新生:new对象 ? 就绪:调用start方法 ? 运行:谁抢到CPU执行,就运行 ? 阻塞:调用sleep()或者wait() ????? 休眠时间结束,进入就绪 ????? 被唤醒进入就绪 (notify,notifyAll) ? 死亡 stop,interrupted ?????? ??? 线程同步 ? 1:同步代码块 ???? synchronized(锁对象){ ?????? ? 需要同步的代码... ???? } ? 2:同步方法 ???? public? synchronized void show(){ ???? ???? 需要同步的代码... ????? } ? 3:Lock锁 ? ?? lock.lock(); ?? ? ??????需要同步的代码... ?? lock.unLock();? ?? 死锁 ? public class DieLock implements Runnable{ ?? public static final Object objA = new Object(); ?? public static final Object objB = new Object(); ?? ?? public boolean flag; ?? ?? public DieLock(boolean flag){ ???? this.flag = flag; ?? } ?? @OverRide ???? public void run(){ ???????? if(flag){ ?????????? synchronized(objA){ ???????????????? synchronized(objB){ ???????????????? ??????????????? } ???????????? } ???????? ???????? }else{ ??????????? synchronized(objB){ ???????????????? synchronized(objA){ ???????????????? ??????????????? } ???????????? } ???????? } ???? } ???? ???? main(){ ????? DieLock d1 = new DieLock(true); ????? DieLock d2 = new DieLock(false); ?????? Thread t1 = new Thread(d1); ?????? Thread t2 = new Thread(d2); ????? t1.start(); ????? t2.start(); ???? ???? } ? }?? 线程通信 ??????? 相互等待,相互唤醒? 网络编程:Socket编程 ?网络编程3要素 ?? 1:IP地址? 5类 ?? 2:端口号?? 0-65535 ?? 3:协议 ???? TCP ?????? ? 面向连接 3次握手协议 ?????? ? 安全,效率低 ?????? ? 可传输大量数据 ???? UDP ????????????????????? 非面向连接 ????????????????????? 不安全,下率高 ????????????????????? 传输数据量小 ????????????????????? 可以广播发送 ? udp发送端 ????? 1:创建发送端的socket ????? DatagramScoket? ds = new DatagramScoket(); ????? 2:创建数据包 ????? byte[] by = {97,98,99}; ????? DatagramPacket dp = new DatagramPacket(by,by.length,InetAddress.getLocalHost(),10086); ????? 3:发送数据包 ????? ds.send(dp); ????? 4:关闭socket ????? ds.close(); ? udp接受端???? ????? 1:创建接受端的socket ????? DatagramScoket? ds = new DatagramScoket(10086); ????? 2:创建数据包 ????? byte[] by = new byte[1024]; ????? DatagramPacket dp = new DatagramPacket(by,by.length); ????? 3:接受数据包 ????? ds.receive(dp); ????? 4:拆包 ??????? byte[] by2 = dp.getDatea();?? 数据 ??????? int len = dp.getLneght();? 数据长度 ??????? InetAddress? address = dp.getAddress(); 发送端的ip ??????? new String(by2,len); ????? 5:关闭socket ????? ds.close(); ? tcp客户端 ???? 1:创建客户端的套接字 ?????? Socket s = new Socket(InetAddress.getLocalHost(),10086); ???? 2:获取输出流 ?????? BufferedOutputStream? bos = new BufferedOutputStream(s.getOutputStream()); ???? 3:获取输入流 ?????? BufferedIntputStream? bis = new BufferedIntputStream(s.getIntputStream()); ? ???3:写数据 ??????? bos.writer("你好吗".getBytes());? ???? 4:通知服务器,写入数据完毕 ??????? s.shutdownOutput();?? ???? 5:读取服务器给出的响应 ??????? bis.read();?? ???? 6:关闭套接字 ??????? s.close();? ? tcp服务器端 ???? 1:创建服务器端的套接字 ???? ServerSocket ss = new ServerSocket(10086); ??? ?2:监听客户端套接字,并获取套接字 ???? Socket s = ss.accept(); ???? 3:获取输入流 ????? BufferedIntputStream? bis = new BufferedIntputStream(s.getIntputStream()); ???? 4 获取输出流 ????? BufferedOutputStream? bos = new BufferedOutputStream(s.getOutputStream()); ???? 5:读数据 ????? byte[] by = new byte[1024]; ????? int num = 0; ????? while((num = bis.read(by))!=-1){ ???????? new String(by,num); ????? } ???? 6:给出响应信息 ????? bos.write("反馈信息".geBytes()); ????? bos.flush(); ???? 5:关闭套接字 ????? s.close(); ?XML解析 ?? 1:DOM解析 ?? 2:SAX解析 ?? 3:JDOM解析 ?? 4:DOM4J解析 ????? ?????? SAXReader reader = new? SAXReader(); ?????? Document doc = reader.read(new File(pathname)); ?????? Element root = doc.getRootElements("Students"); ?????? Iterator ?????? while(it.hasNext){ ??????? Element el = it.next(); ???????? Attribute attr = el.attribute("id"); ???????? attr.getName();属性名 ???????? attr.getText();属性值 ???????? Iterator ???????? while(it.hasNext){ ?????? ??????? Element el = it.next(); ?????? ???????? Attribute attr = el.attribute("id"); ?????? ???????? attr.getName();属性名 ?????? ???????? attr.getText();属性值 ?????? ???????? Iterator ???????? } ?????? } ?正则表达式 ????????? 具有正确规则的字符串的表达式 ?? [0-9a-z_A-Z] ?? {a}?? 0-1 ?? {a}*? 0-N ?? {a}+? 1-N ?? {3,6}? 3-6??? ????????? ??? 判断 ????? boolean flag = "abc".matcher(regex) ??? 分割? ????? String[] str = "a,c".split(regex); ??? 替换 ????? "abc".replaceAll("a",regex); ??? 获取 ????? String regex = "b[a-z]{3}b"; ???? Pattern pt = new Pattern(); ???? Matcher mt = pt.complie(regex); ???? while(matcher.find()){ ????? mt.group(); ???? } ??? ?反射 ?? 1:获取Class ?? Class clazz = Class.foName("java.lang.String");? ?? 2:获取构造器 public ??? Constructor con =? clazz.getConstructor(String.class); ?????????? 获取构造器 所有 ??? Constructor con2 =? clazz.getDeclaredConstructor(String.class); ?? 3:创建对象 ??? Object? obj = clazz.newInstance(); 无参对象 ??? Object obj = con.newInstance("字符串"); ?? 4:获取属性 ?? Field field = clazz.getField("name",String.class); ?? 5 暴力破解 ?? field.setAccessable(true); ?? 6:属性赋值 ??? field.set(obj,"张三"); ?? 7:获取属性值 ?? field.get(obj); ?? 8:获取方法 ?? Method m = clazz.getMethod("add",String.class); ?? 9调用方法 ??? Object obj = m.invoke(obj,"你好"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |