2019.3.13 Day 13 API

2019.3.13 Day 13 API
2019.3.13 Day 13 API
2019.3.13 Day 13 API

2019.3.13 Day 13 API
2、退出虚拟机
3、获取参数值
4.通知垃圾回收机制来回收对象(只能是通知,不是强制规定)

常用类

api中包的作用

java.awt : 包含创建用户界面和绘制图形图像的类。

java.io: java提供的数据流、序列化、以及文件系统(生成创建本地文件夹、读取本地文件夹中数据的内容)

**java.long:**提供了java进行编程过程中的一些基础类。

**java.math.**提供了数学中的各种计算公式,或者计算方法。

java.text:提供一些类来处理文本、日期、以及数字和消息。

java.util:包含开发过程中用到的各种工具类,(collection框架、随意数生成器等等)

javax.sql: java提供访问数据库的一些接口和类

javax.xml:提供用户解析xml文件的接口和类

我们自己在创建包的时候,不要用以上这些名字

利用arrays来操作数组:(查一下API包内的array方法)
2019.3.13 Day 13 API

currentTimeMillis();输出当前时间。
2019.3.13 Day 13 API

计算某一个程序运行了多少时间 (毫秒)
2019.3.13 Day 13 API

2019.3.13 Day 13 API
2019.3.13 Day 13 API

2019.3.13 Day 13 API
2019.3.13 Day 13 API
2019.3.13 Day 13 API
2019.3.13 Day 13 API

System类

java在不同操作系统可能会获取平台的一些属性,或者调用平台的一些命令来完成特定的功能。
System类目的是提供给开发者,可以供我们操作平台的一些内容。

特点:
1、final类,终态类,不能再被继承
2、类中所有的属性和方法都是静态static的,在操作的时候可以通过 类名.属性类名.方法

Runtime类

Runtime不能自己写 不能new 在java运行的时候这个类会自动生成。直接用
2019.3.13 Day 13 API
代表java运行时的环境,每一个java程序都会有一个Runtime类,应用程序通过Runtime类可以和运行环境相连,可以通过Runtime类可以获取到当前运行环境的信息。比如:虚拟机的内存,cpu核心数,或者通过Runtime去执行操作系统的命令。
2019.3.13 Day 13 API
通过getRuntime才能调用这个类的功能。
2019.3.13 Day 13 API

2019.3.13 Day 13 API

2019.3.13 Day 13 API

String类:面试热点

特点:
1、是一个final类,不可被继承。 String并不是基本数据,表示字符串意思,当前String类是final类。
2、String表示字符串,在操作String的时候每次操作当前String都会产生一个新的对象。(一旦创建了一个字符串,字符串就不能被变更,直到被销毁)

创建字符串:
String s = “abc”;
String s2 = new String( “abc” );

例题:

2019.3.13 Day 13 API
” ==是比较地址的 “
1、true 所对应的值一样。两个abc都存储在常量池内,地址一样,(因为String不是基本数据类型。)
2019.3.13 Day 13 API
2、true 所对应的值一样 “a"+“bc"在编译期间会自动转化为"abc”;(String s3 = “a”+“bc” 在class文件中的常量池里面 经过计算后 存放了一个值为”abc“的数据 )
2019.3.13 Day 13 API
3、false 。这样比,比的是str4的地址和str5的地址。两个地址不一样。 一块指向常量池,一块指向堆。
2019.3.13 Day 13 API
4、false str2把abc放到常量池,str4的对象在堆里面,str4引用指向堆里面, 这两个存储的地址都不一样,两个肯定不一样。

字符串加载的流程

常量池:在java中,常量池分成两种:
1、静态常量池:*.class 文件中的常量池,class文件中的常量池不仅包含了字符串的字面量信息(数字),还包含了类、方法之类的信息。就是这些东西占据了class文件的空间。
String s3 = “a”+“bc” 在class文件中的常量池里面 经过计算后 存放了一个值为”abc“的数据

2、动态常量池:运行时的常量池,也称为动态常量池,在JVM加载完当前类过后,将Class文件中的常量池内容加载到内存中,保存在方法去里面,方法区里面单独有一块空间来存放这些数据。也叫做方法区常量池。

例题2:
2019.3.13 Day 13 API
“a”+str2 这个运算过程,是在堆里面运行,所以无法比较地址

稍作变化:
2019.3.13 Day 13 API

结果变为:
2019.3.13 Day 13 API
通过final 检测到你是常量,就马上加载到静态常量池,确定bc不会变了之后,静态常量池就直接把 常量bc和变量a加到了一起。成了abc。 ( 可以直接相加,因为常量的值不会再变了。)
常量在编译期间就能确定他的值,在加载的时候在静态常量池里面就已经加起来了 加了final。

2019.3.13 Day 13 API
虽然是final 但是getString在编译期间依然无法确定它的值,所以还是没法比较(因为比较的时候getString还没有运行)。

字符串的特性:不可变更

原理:字符串到底怎么样工作的?
String使用public static final char[ ]来保存的字符串数据,将你定义的每一个字符装到字符数组里面去,但是字符数组是final类型的,不可变更。等你拿字符串进行任何 加 替换等操作,只能产生一个新的对象,将原来的引用 指向新的对象,旧对象等待被回收。

例:

:hello kitty welcome 变成hello word welcom
2019.3.13 Day 13 API
2019.3.13 Day 13 API
解析:hello kitty hello kitty welcome 等待被回收
修改的时候,不会在原来的值上进行修改,而是会创建一个新的类,原来的值用之后就被废弃了
栈内的S会指向堆内新的值,旧的值就等待被回收了。

字符串String的api方法-java-long包

charAt :输出下标为0 的字符(练习题:输出当前字符串内第?个字符)
2019.3.13 Day 13 API
compareTo:比较大小(比较每一个字符的asc码)
concat :拼接 类似于加号

2019.3.13 Day 13 API
某一个字符 在字符串内 第一次、最后一次出现的位置。

拆分:按照某种特定的符号、字符 去拆。拆分出来的数据用数组去接收。
2019.3.13 Day 13 API

拆分2:
2019.3.13 Day 13 API
全部改成大写:
2019.3.13 Day 13 API

全部改成小写
2019.3.13 Day 13 API

去空格。(当输入密码的时候会不自觉的加一些空格)
2019.3.13 Day 13 API
2019.3.13 Day 13 API
false.

通过trim去掉首尾空格。
2019.3.13 Day 13 API

StringBuffer和StringBuilder

StringBuffer的特点:
1、StringBuffer和String一样,都是用来存储字符串的,但是他们内部的实现方式有区别,所对应的使用范围就不一样。他在处理字符串的时候,在原来的值上面进行修改,不会产生新的内容。

在某些时候,他的性能要优于String。String要消耗资源、效率比较低。
当前对象他是线程安全的对象。

2、StringBuffer对象不能使用 = 等号来初始化,只能用构造的形式来初始化对象(new一个对象,通过构造传参进去)。

3、因为他是可变的,经常用他来操作变化的字符串,比如有的字符串要频繁的增加、修改、删除内容。

2019.3.13 Day 13 API
StringBuffer也处理过toString的问题,可以处理地址,输出的是值不是地址

append 拼接方法。从堆(字符串缓冲区)里取出值 修改后再返回字符串缓冲区
2019.3.13 Day 13 API

StringBuilder

特点同StringBuffer一样
StringBuilder:是线程不安全的。但是效率非常高

三个的区别:
s 不可变 sb sb2可变

s sb都是线程安全的 sb2不安全的 效率sb2>s>sb

上面这些在运行的时候,效率差别到底有多大?

练习:
2019.3.13 Day 13 API
1.2019.3.13 Day 13 API

3.思路: 把一个字符串倒过来输出 和原来的比较 如果相等,则对称。

4.Arrays.sort(shuzu)

5、2019.3.13 Day 13 API

number.length
数组是不加括号的 长度
number.length()
对象是加括号的 length方法。