概述
jre是java运行环境jdk是java开发工具包,包含jrejvm是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()
时间// 格式化日期
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 键值对,键不重复
HashMap // 遍历
HashMap<String,Student> hashMap = new HashMap<>();
Student stu = new Student("李明", "男");
hashMap.put("Jack",stu);
Set keys = hashMap.keySet();
Collection values = hashMap.values();
for (Object key:keys){
Student stu1 = hashMap.get(key);
}
TreeMap
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:双向链表,支持两端插入和移除
优势
实例化对象并改变指针即可,添加、删除快 劣势
先判断靠近那一端,再向中间依次查询效率低,查询慢 set 不重复,无序
HashSet// 遍历,无序
HashSet hashSet = new HashSet();
hashSet.add("a");
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
TreeSet
遍历方式和hashSet一样,使用元素的自然顺序对元素排序 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
不要求程序必须处理 非运行时异常,必须处理 堆(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