目录

一、基本概念:程序,进程,线程

二、多线程的创建

三、线程的生命周期

四、线程的通信

五、String的使用及细节

六、关于StringBuffer和StringBuilder的使用

七、JDK8之前日期时间API

八、JDK 8之前的日期时间的API测试

九、JDK8中新日期时间API

十、Java比较器

十二、System类

十三、Math类

十四、BigInteger

十五、BigDecimal


一、基本概念:程序,进程,线程

程序(program):程序是为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
进程(process):进程是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程:有它自身的产生,存在,消亡的过程。——生命周期。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。
线程(thread):进程可进一步细分为多个线程,是一个程序内部执行的一条路径。若一个程序同一时间并行执行多个线程,则称该程序是支持多线程的
线程作为调度和执行的,每个线程拥有独立的运行栈和程序计数器(PC)
一个进程中的多个线程共享相同的内存单元/内存地址空间——堆和方法区是一个进程所拥有的,线程可以访问其中的对象和变量。这使得线程通信更加简便,
有效,但同时多个线程共享的系统资源可能会带来安全隐患。多线程的优点:1.提高应用程序的响应。对图形化界面更有意义,可增强用户体验。2.提高计算机系统CPU的利用率。3.改善程序结构,将既长又复杂的进程分为多个线程,独立运行,有利于理解和修改。并行:多个cpu同时执行多个任务,比如:多个人同时做不同的事并发:一个cpu同时执行多个任务,比如:秒杀、多个人做同一件事

二、多线程的创建

方式一:继承于Thread类1.创建一个继承于Thread类的子类2.重写Thread类的run()方法3.常见Thread类的子类的对象4.通过此对象调用start()方式二:实现Runnable接口1.创建一个实现了Runnable接口的类2.实现类去实现Runnable中抽象方法:run()3.创建实现类的对象4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象5.通过Thread类的对象调用start()方式三:实现Callable接口,------JDK 5.0新增=====》在ThreadNew.java文件中如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?1.call()方法可以有返回值的2.call()方法可以抛出异常,被外面的操作捕获,获取异常的信息3.Callable是支持泛型的方式四:使用线程池  ------JDK 5.0新增=======》在ThreadPool.java文件中好处:1)提高了响应速度2)降低资源消耗3)便于线程管理:可以设置线程池的属性corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保留多长时间后会终止如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?1.call()方法可以有返回值的2.call()方法可以抛出异常,被外面的操作捕获,获取异常的信息3.Callable是支持泛型的比较创建线程的两种方式:开发中:优先选择;实现Runnable接口的方式原因:1.实现的方式没有类的单继承性的局限性2.实现的方式更适合来处理多个线程有共享数据的情况联系:public class Thread implements Runnable{}相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中测试Thread中的常用方法:1.start():启动当前线程,调用当前线程的run()方法2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中3.currentThread():静态方法,返回执行当前当前代码的线程4.getName():获取当前线程的名字5.setName():设置当前线程的名字6.yield():释放当前cpu的执行权7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,知道线程b执行完毕,线程a才结束阻塞状态8.stop():强制线程生命周期结束,已过时9.sleep(long millis):让当前线程“睡眠”指定的millis毫秒,在致电给的millis毫秒时间内,当前线程为阻塞状态10.isAlive():判断当前线程是否存活线程的优先级:1.MIN_PRIORITY = 1NORM_PRIORITY = 5MAX_PRIORITY = 102.如何获取和设置当前线程的优先级:getPriority():获取线程的优先级setPriority():设置线程的优先级说明:高优先级的线程要抢占低优先级线程cpu的执行权,但是只是从概率上将,高优先级的线程高概率的情况下被执行,并不意味着只有当高优先级的线程执行完以后,低优先级的线程才执行。

三、线程的生命周期

新建态、就绪态、运行态、阻塞态、终止态。这个和计算机操作系统的知识点一样。具体图像看下方链接。
https://blog.csdn.net/SeniorShen/article/details/102921019使用继承Thread类存在线程的安全问题:1.使用同步代码块解决继承Thread类的方式线程安全问题此时也需要将对象设置成static或者使用当前对象this实现Runnable接口存在线程的安全问题:1.问题:卖票过程中,出现了重票、错票2.出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票3.如何解决:当一个线程在操作ticket的时候,其他线程不能参与进来,直到线程a操作完ticket事,其他线程才可以开始操作ticket.这种情况即使线程a出现了阻塞,也不能被改变4.在Java中,我们通过同步机制,来解决线程的安全问题方式一:同步代码块synchronized(同步监视器){//需要被同步的代码}说明:1.操作共享数据的代码,即为需要被同步的代码2.共享数据:多个线程共同操作的变量。比如:ticket就是共享数据3.同步监视器,俗称:锁。任何一个类的对象,都可以充当锁。或者用当前对象this要求:多个线程必须要共用同一把锁补充:在实现Runnable接口创建多线程的方式中,我们可以考虑使用this充当同步监视器在继承Thread类创建多线程的方式中,我们要慎用this充当同步监视器,可以考虑使用当前类充当同步监视器方式二:同步方法如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的。关于同步方法的总结:1.同步方法仍然涉及到同步监视器,只是不需要我们去显示的声明2.非静态的同步方法,同步监视器为:this静态的同步方法,同步监视器为:当前类本身方式三:Lock锁 ---- JDK5.0新增======》在LockTest.java文件中优先使用顺序:Lock-->同步代码块(已经进入了方法体,分配了相应资源)-->同步方法(在方法体之外)5.同步的方式,解决了线程的安全问题。---好处操作同步代码时,只能有一个线程参与,其他线程等待。相当于是一个单线程的过程,效率低----局限性面试题:sleep() 和 wait() 的异同?1.相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态2.不同点:1)两个方法声明的位置不同:Thread类中声明sleep(),Object类中声明wait()2)调用的要求不同:sleep()可以在任何需要的场景下调用。wait()必须使用在同步代码块或同步方法中3)关于是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会释放锁面试题:synchronized 与 Lock的异同?同:二者都可以解决线程安全问题不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())

四、线程的通信

涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的线程notifyAll():一旦执行此方法,就会唤醒所有被wait的线程
说明:1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中2.wait(),notify(),notifyAll()三个方法的调用者必须是同步代码块或同步方法中同步监视器。否则,会出现异常3.wait(),notify(),notifyAll()三个方法是定义在java.lang.Object类中

五、String的使用及细节

String字符串,使用一对" "表示1.String声明为final的,不可被继承2.String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小3.String内部定义了final char[] value用于存储字符串数据4.String:代表不可变的字符序列。简称:不可变性。体现:1)当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值2) 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值3)当调用String的replace()方法修改字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。6.字符串常量池中是不会存储相同内容的字符串的。String的实例化方式:方式一:通过字面量定义的方式(test1)方式二:通过new +构造器的方式(test2)面试题: String s= new String("abc");方式创建对象,在内存中创建了几个对象?创建了两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:"abc"结论:1.常量于常量的拼接结果在常量池,且常量池中不会存在相同内容的常量2.只要其中有一个是变量,结果在堆中3.如果拼接的结果调用intern()方法,返回值就在常量池中http://www.atguigu.com/jsfx/12158.html    具体网页或者        https://www.bbsmax.com/A/GBJrxnyGd0/
1、常用方法系列之一
int length():返回字符串的长度: return value.length;
char charAt(int index):返回某个索引处的字符:   return value[index]
boolean isEmpty():判断是否是空字符串:return value.length == 0;
String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String trim():返回字符串的副本,忽略前导空白和尾部空白。
boolean equals(Object obj):比较字符串的内容
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
int compareTo(Sting anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取
String substring(int beginIndex,int endIndex):返回也给新字符串,它是此字符串从beginIndex到endIndex结束String类字符串查找操作
boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true。
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex):返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。2、String类判断是否以指定内容开头或结尾
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始String类与其他结构之间的转换String ---> byte[]之间的转换:调用String的getBytes()byte[] --->  String之间的转化:System.out.println(Arrays.toString(bytes));编码:字符串String---》字节byte[](看得懂---》看不懂的二进制数据)解码:字节byte[]---》字符串String(看不懂的二进制数据--》看得懂)说明:解码时,要求解码集使用的字符集必须与编码时使用的字符集一致,否则会出现乱码String ---> char[]之间的转换:toCharArray()char[] --->  String之间的转化:String str2 = new String(arr);String 与基本数据类型、包装类之间的转换String ---》基本数据类型、包装类:调用包装类的方法:parseXxx(str)基本数据类型、包装类 ---》String:调用String重载的valueOf(xxx)

六、关于StringBuffer和StringBuilder的使用

效率:StringBuilder>StringBuffer>StringString 和 StringBuffer 和 StringBuilder的异同?异:Sting:不可变的字符序列;底层用char[]储存StringBuffer:可变的字符序列;线程安全,效率低StringBuilder:可变的字符序列;线程不安去,效率高同:String,StringBuffer,StringBuilder底层用char[]储存源码分析:String str = new String();//new char[0]String str = new String("abc");//new char[]{'a','b','c'}StringBuffer sb1 = new StringBuffer();//new char[16];底层创建了一个长度时16的数组System.out.println(sb1.length());//0sb1.append('a');//value[0]='a';sb1.append('b');//value[1]='b';StringBuffer sb2 = new StringBuffer("abc");//char[] value =new char["abc"+length()+16];//问题1.System.out.println(sb2.length());//3问题2.扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组默认情况下,扩容为原来的2倍+2,同时将原有数组中的元素复制到新的数组中指导意义:开发中建议使用StringBuffer(int capacity) 或StringBuilder(int capacity)自定义长度StringBuffer常用方法:StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接StringBuffer delete(int start,int end):删除指定位置的内容StringBuffer replace(int start, int end, String str):把[start,end)位置替换为strStringBuffer insert(int offset, xxx):在指定位置插入xxxStringBuffer reverse() :把当前字符序列逆转public int indexOf(String str)public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串public int length()public char charAt(int n )public void setCharAt(int n ,char ch)总结:常用方法:增:append()删:delete(int start,int end)改:replace(int start,int end,String str)//setCharAt(int n,char ch)查:charAt(i)插:insert (int offset,xxx)长度:length()遍历:for+charAt(i)

七、JDK8之前日期时间API

1. java.lang.System类System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适于计算时间差。2、java.util.Date类表示特定的瞬间,精确到毫秒。构造器: Date():          使用无参构造器创建的对象可以获取本地当前时间。 Date(long date): 创建指定毫秒数的date对象。常用方法 getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天(Sun, Mon, Tue,Wed, Thu, Fri, Sat),zzz是时间标准。 其它很多方法都过时了。3. java.sql.Date类构造器: java.sql.Date(long date): 创建指定毫秒数的date对象。常用方法 getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 java.sql.Date 对象表示的毫秒数。 toString():把此 Date 对象转换为以下形式:2020-10-11如何将java.util.Date对象转换为java.sql.Date对象//情况一:Date date = new java.sql.Date(2343243242323L);java.sql.Date date1 = (java.sql.Date) date;//情况二:Date date2 = new Date();java.sql.Date date3 = new java.sql.Date(date2.getTime());

八、JDK 8之前的日期时间的API测试

 ------------------》具体代码看DateTimeTest1
1.System类中currentTimeMillis();
2.java.util.Date和子类java.sql.Date
3.SimpleDateFormatSimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析1.两个操作:1.1格式化:日期 --》字符串1.2解析:格式化的逆过程,字符串--》日期2.SimpleDateFormat的实例化练习一:字符串“2020-09-24”转换为java.sql.Date练习二:"三天打鱼两天晒网"    1990-01-01     xxxx-xx-xx  是在打鱼?晒网举例:2023-09-24 ?要先算出总天数,然后 总天数%5==1,2,3:打鱼,4,0:晒网总天数的计算:方式一:获取到两个时间的毫秒数后相减  date1.getTime()-date2.getTime()/(1000*60*24*60)+1方式二:1990-01-01 --> 2022-12-31+2023-01-01--->2023-09-24     可以使用日历类做比较方便,日历类可以直接找出天数
4.CalendarCalendar日历类(抽象类)的使用1.实例化方式一:创建其子类(GregorianCalendar)的对象方式二:调用其静态方法getInstance()2.常用方法get(),set(),getTime(),add(),setTime()calendar是可变的注意:获取月份时,一月是0,以此类推获取星期时,周日是1,。。。周六是7

九、JDK8中新日期时间API

一、解决问题旧的API问题:可变性:像日期和时间这样的类应该是不可变的。偏移性:Date中的年份是从1900开始的,而月份都从0开始。格式化:格式化只对Date有用,Calendar则不行。此外,它们也不是线程安全的;不能处理闰秒等。
二、主要包:java.time – 包含值对象的基础包本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。java.time.chrono – 提供对不同的日历系统的访问java.time.format – 格式化和解析时间和日期java.time.temporal – 包括底层框架和扩展特性java.time.zone – 包含时区支持的类说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。因此,尽管有68个新的公开类型,大多数开发者,大概将只会用到其中的三分之一。
三、重点内容:一、类:LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。LocalTime表示一个时间,而不是日期。LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。Instant是用来表示在时间线上的瞬间点。DateTimeFormatter:格式化或解析日期、时间类似于SimpleDateFormat……二、方法:LocalTime、、LocalDate、LocalDateTime类的方法now():静态方法。获取当前的日期、时间、日期+时间of():静态方法。设置指定的年、月、日、时、分、秒。没有偏移量getXxx():获取相关的属性withXxx():将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象(with相当于set的意思)plusXxx():向当前对象添加几天、几周、几个月、几年、几小时并返回新的对象。minusXxx():从当前对象减去几月、几周、几天、几年、几小时并返回新的对象。Instant类的方法now()  :静态方法,返回默认UTC时区的Instant类的对象。从指定的时钟获取当前时刻。获取本初子午线对应的标准时间atOffset(ZoneOffset offset):结合即时的偏移来创建一个 OffsetDateTimeofEpochMilli(long epochMilli):静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象toEpochMilli():返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳DateTimeFormatter方法三种格式化方式: 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)。 FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime重点   自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)方法:format(TemporalAccessor t): 格式化一个日期、时间,返回字符串parse(CharSequence text): 将指定格式的字符序列解析为一个日期、时间ofPattern(String pattern):静态方法 , 返 回 一 个 指 定 字 符 串 格 式 的DateTimeFormatter其它APIZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/ParisClock:使用时区提供对当前即时、日期和时间的访问的时钟。持续时间:Duration,用于计算两个“时间”间隔日期间隔:Period,用于计算两个“日期”间隔TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下一个工作日”等操作。JDK 8之前和JDK 8中日期、时间相关的类分别有哪些?java.util.Date 和 java.sql.Date  -> InstantSimpleDateFormat     ->     DateTimeFormatterCalendar(可变性)    ->   LocalDate、LocalDateTime、LocalTime(不可变性)

十、Java比较器

-----对象数组的排序问题,涉及到对象之间的比较问题
一、前言java中的对象,正常情况下,只能进行比较:==  或  != 。不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。所以产生了java比较器。
二、实现:使用两个接口中的任何一个:Comparable 或 Comparator
三、自然排序:java.lang.Comparable1、简明:自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序.2、实现: Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。 实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。 对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。3、重写compareTo(obj)的规则:如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。4、Comparable 的典型实现:(默认都是从小到大排列的)String:按照字符串中字符的Unicode值进行比较Character:按照字符的Unicode值来进行比较数值类型对应的包装类以及BigInteger、BigDecimal:按照它们对应的数值大小进行比较Boolean:true 对应的包装类实例大于 false 对应的包装类实例Date、Time等:后面的日期时间比前面的日期时间大5、菜鸡杂记Arrays.sort(goodslist);System.out.println(Arrays.toString(goodslist));数组的sort方法的调用:数组的sort方法的定义为 public static void sort(Object[] a) {}。是静态的,可以直接类名.方法名。无返回值,而是直接把数组进行了排序()内为一个数组对象。要对这个数组对象排序那么这个数组类就要实现Comparable 或 Comparator,(Object obj) 方法四、定制排序:java.util.Comparator1、简明当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码(如jdk原有的),或者实现了java.lang.Comparable接口的排序规则不适合当前的操作(如:String从大到小),那么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排序的比较。2、实现:重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。3、其他: 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。 还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。4、案例:public void comparatorTest(){String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};Arrays.sort(arr, new Comparator<String>() {@Override//改变compareTo默认的从小到大排列,按照字符串从大到小的顺序排列public int compare(String o1, String o2) {return -o1.compareTo(o2);}});//输出结果:[MM, KK, JJ, GG, DD, CC, AA]System.out.println(Arrays.toString(arr));}
五、Comparable接口与Comparator的使用的对比:*Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。*Comparator接口属于临时性的比较。

十二、System类

 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
 成员变量 System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
 成员方法 native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。 void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。 void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。 String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:java.version      Java运行时环境版本java.home         Java安装目录os.name           操作系统的名称os.version        操作系统的版本user.name         用户的账户名称user.home         用户的主目录user.dir          用户的当前工作目录

十三、Math类

一、初始:java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。
二、常用方法:abs 绝对值acos,asin,atan,cos,sin,tan 三角函数sqrt 平方根pow(double a,doble b) a的b次幂log 自然对数exp e为底指数max(double a,double b)min(double a,double b)random() 返回0.0到1.0的随机数long round(double a) double型数据a转换为long型(四舍五入)toDegrees(double angrad) 弧度—>角度toRadians(double angdeg) 角度—>弧度

十四、BigInteger

 Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的,最大为2^63-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
 java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
 构造器:BigInteger(String val):根据字符串构建BigInteger对象
 常用方法 public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。 BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。 BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。 BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。 BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

十五、BigDecimal

 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
 BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
 构造器 public BigDecimal(double val) public BigDecimal(String val)
 常用方法 public BigDecimal add(BigDecimal augend) public BigDecimal subtract(BigDecimal subtrahend) public BigDecimal multiply(BigDecimal multiplicand) public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

尚硅谷java多线程相关推荐

  1. 尚硅谷Java入门视频教程导读及第一章

    尚硅谷Java入门视频教程导读及第一章 JAVA基础学习导读-编程入门 0.1概述 0.2 计算机硬件介绍 中央处理器(CPU) 存储设备 内存 比特(bit)和字节(byte) 内存 输入和输出设备 ...

  2. 尚硅谷Java、HTML5前端、全栈式开发视频

    Java基础阶段: 一.20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二.尚硅谷Java基础实战--Bank项目 http://pan.baid ...

  3. 【视频分享】尚硅谷Java视频教程_Spring Boot视频教程(下)整合篇

    尚硅谷Java视频教程_Spring Boot视频教程(下)整合篇 巅峰之作,全网仅此一套,再无企及! SpringBoot是企业级开发的整体整合解决方案,特别用于快速构建微服务应用,旨在用最简单的方 ...

  4. 尚硅谷 java基础第二个项目之客户关系管理系统

    尚硅谷 java基础第二个项目之客户关系管理系统. 做了一些完善,增加性别,电话,邮箱有效性验证.其中电话和邮箱验证直接"饮用"了网友的果汁. 在此感谢各位原著大佬们的分享. 具体 ...

  5. 尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业01

    尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业第一题 要求: 1)在前面的基础上,将稀疏数组保存到磁盘上,比如map.data 2) 恢复原来的数组时,读取map.data进行恢复 ...

  6. 尚硅谷Java入门视频教程第二章——Java基本语法

    尚硅谷Java入门视频教程第二章 第一章复习 课后习题 Java语言概述 第2章:Java基本语法 2.1 关键字和保留字 2.2 标识符(Identifier) 2.3 变量 2.3.1 变量基本概 ...

  7. 尚硅谷Java入门视频教程第十七章——Java9Java10Java11新特性

    尚硅谷Java入门视频教程第十七章--Java9&Java10&Java11新特性 第17章:Java9&Java10&Java11新特性 17.1 Java 9 的新 ...

  8. 尚硅谷Java入门视频教程第三章——数组

    尚硅谷Java入门视频教程第三章 第二章复习 课后习题 复习 嵌套循环典型例题 Ecplise的安装使用 第3章:数组 3.1 数组的概述 3.2 一维数组的使用 3.3 多维数组的使用 3.4 数组 ...

  9. 用数组实现环形队列(尚硅谷Java数据结构与算法)

    整个代码在文章最后面,gitee地址:java数据结构与算法: 自己学习与练习数据结构的仓库https://gitee.com/ALi_L/javaDataStructurs.git 环形队列的难点如 ...

最新文章

  1. ASP.NET的WebFrom组件LinkButton编程
  2. 放假看片时,一定要检查域名是不是 HTTPS ,不然……
  3. 基于opencv的BackgroundSubtractorMOG2目标追踪
  4. CVPR2019目标检测方法进展综述
  5. js解析顺序了解一下??
  6. 如何让PictureBox背景色透明
  7. rtsp协议_Chromium(3/5):rtsp客户端
  8. CF932G-Palindrome Partition【PAM】
  9. 信息学奥赛C++语言:幸运奶牛
  10. 用Canvas为网页加入动态背景
  11. X86汇编语言从实模式到保护模式12:存储器的保护
  12. 程序员都该懂的 UML 规范!
  13. Fiddler-半自动构造少量数据
  14. 团队开发之个人博客一
  15. 网易云音乐ncm批量解码转换flac和mp3,qq音乐qmc转换
  16. 设置代理服务器(谷歌+IE)
  17. 电脑可以上网,但是仍然显示无网络连接
  18. 单片机 stm32 差分升级 增量升级算法源码,提供移植 纯c编写跨平因为是程序源码
  19. Android Studio 解决dependence问题
  20. VirtualBox 里安装win7 / win8 不能全屏的解决方法

热门文章

  1. Web3是未来还是大忽悠?
  2. kafka常见命令集锦
  3. 电视派显示服务器没给数据,创维\酷开电视一些常见问题解答
  4. CAM是指利用计算机进行辅助制造工作,CAM计算机辅助制造系统
  5. python 异或两个文件
  6. Lumerical FDTD,MODE官方案例下载
  7. 数据结构之线索二叉树详细解释
  8. 帮我找一个用Java写的二分法排序代码
  9. 如何去掉图片背景,改成透明的?
  10. 优思学院|传统的质量管理和现代的六西格玛管理有何分别?