概述
- jre是java运行环境
- jdk是java开发工具包,包含jre
- jvm是Java虚拟机
基础知识
- 数据类型
- 基本类型
- 整型
- short 16位
- int 32位
- long 64位
- 浮点
- float 32位
- double 64位
- 字节
- byte 8位
- 字符
- char
- 布尔
- boolean
- 整型
- 包装类型
- Boolean
- Number
- Byte,Short,Integer,Long,Float,Double
- Character
- 基本类型
- StringBuilder、StringBuffer和String
- StringBuilder
- 变量,对变量进行操作就是直接对该对象进行更改,线程不安全,最快
- 适用于少量的字符串操作
- StringBuffer
- 变量,对变量进行操作就是直接对该对象进行更改,线程安全,快
- 适用于单线程下在字符缓冲区进行大量操作
StringBuffer buffer = new StringBuffer("hello"); String buffer = stb.toString(); buffer.append(" world"); buffer.insert(5,"000" );
- String
- 常量(private final char value[]?,对变量进行操作就是重新指向已存在或新创建的对象,慢
- 适用多线程下在字符缓冲区进行大量操作
String[] str = str.split(","); String stri1 = str.substring(start,end) char c = str.charAt(i); int index = str.lastIndexOf("."); String stri2 = str .toUpperCase()
- StringBuilder
- 时间
// 格式化日期 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.format(date) //string转日期 Date date = sdf.parse("2019-04-12 20:54:04"); // 格式必须一致 // 获取当前年月日,时间 Calendar calendar = Calendar.getInstance(); calendar.get(Calendar.YEAR) calendar.get(Calendar.MONTH)+1) calendar.get(Calendar.DAY_OF_MONTH) Date date = calendar.getTime() // Sun May 26 22:19:45 GMT+08:00 2019 // 获取是一年中第几周 int week = calendar.get(Calendar.WEEK_OF_YEAR);
- io
File dir = new File("E:\\FileTest\" ); file.mkdirs(); dir.delete(); File file = new File("E:\\mytouch.txt"); file.createNewFile(); file.exists(); file.getAbsolutePath(); file.renameTo(new File("E:\\new_mytouch.txt")); //文件过滤
- 类型转换
- 自动装箱拆箱
Integer x =1; int num = x;
- String转int
- int a = Integer.parseInt(str);
- int转String
- s=String.valueOf(i);
- String转BigDecimal
- BigDecimal bd = new BigDecimal(“2.30”);
- BigDecimal转String
- String result = bd.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
- 自动装箱拆箱
- 集合
- 集合不允许存放基本数据类型,自动转为包装类存储
- Map 键值对,键不重复
- Collection 重复,无序
- List 重复,无序
- ArrayList:对数组操作的封装
- 优势
- 数组通过下标直接找到元素,查询快
- 劣势
- 实例化新数组和复制数据都需要时间,添加、删除慢
ArrayList<String> strings = new ArrayList<>(); // Collections工具类 Collections.addAll(strings,"Red","Blue","Green"); // 对值排序 Collections.sort(strings); // 对对象排序 ArrayList<People> list = new ArrayList<>(); Collections.sort(list, (o1, o2) -> o1.name.compareTo(o2.name)>0 ? 1: (o1.name.compareTo(o2.name)==0 ) ? 0:-1); // 对有序集合,二分法查找 int num = Collections.binarySearch(strings, "Red"); // 最大值 String max = Collections.min(strings);
- 优势
- LinkList:双向链表,支持两端插入和移除
- 优势
- 实例化对象并改变指针即可,添加、删除快
- 劣势
- 先判断靠近那一端,再向中间依次查询效率低,查询慢
- 优势
- ArrayList:对数组操作的封装
- set 不重复,无序
- HashSet
// 遍历,无序 HashSet hashSet = new HashSet(); hashSet.add("a"); Iterator iterator = hashSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); }
- TreeSet
- 遍历方式和hashSet一样,使用元素的自然顺序对元素排序
- HashSet
- List 重复,无序
- static
- 方便在没有创建对象的情况下来进行调用(方法/变量)
- static代码块
- 只会在类加载的时候执行一次
- 将一些只需要进行一次的初始化操作都放在static代码块中进行
- 枚举enum
// 定义枚举常量 public enum Genders { Male,Female; } // 使用 public class Student { public Genders sex; public void test() { Student student = new Student(); student.sex = Genders.Male; } }
- 异常继承关系
- Object
- Throwable
- Error
- 仅靠程序本身无法恢复的严重错误
- Exception
- 抛出或处理的非严重错误
- RuntimeException
- 不要求程序必须处理
- 非运行时异常,必须处理
- Error
- Throwable
- Object
- 堆(heap)栈(stack)和方法区(method)
- 堆
- 只有一个,被所有线程共享,存对象,都有内存地址值
- 栈
- 每个线程有一个,其他栈不能访问,存基本数据类型(字面值)和对象的引用变量
- 方法区(静态区)
- 被所有的线程共享,存class和static变量
- 堆
环境搭建
- 安装jdk并配置环境变量
- https://www.cnblogs.com/tiankong101/p/4226559.html
- 扩展
- Fibonacci sequence黄金分割数列
- 前面两个数为1,1,后面每个数为前两个数之和
- 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610
- 前一项与后一项的比值越来越逼近黄金分割0.618
- 5÷8=0.625,55÷89=0.617977,144÷233=0.618025
- 前面两个数为1,1,后面每个数为前两个数之和
- Fibonacci sequence黄金分割数列