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方法)
在这里插入图片描述

currentTimeMillis();输出当前时间。
在这里插入图片描述

计算某一个程序运行了多少时间 (毫秒)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

System类

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

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

Runtime类

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

在这里插入图片描述

在这里插入图片描述

String类:面试热点

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

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

例题:

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

字符串加载的流程

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

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

例题2:
在这里插入图片描述
“a”+str2 这个运算过程,是在堆里面运行,所以无法比较地址

稍作变化:
在这里插入图片描述

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

在这里插入图片描述
虽然是final 但是getString在编译期间依然无法确定它的值,所以还是没法比较(因为比较的时候getString还没有运行)。

字符串的特性:不可变更

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

例:

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

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

charAt :输出下标为0 的字符(练习题:输出当前字符串内第?个字符)
在这里插入图片描述
compareTo:比较大小(比较每一个字符的asc码)
concat :拼接 类似于加号

在这里插入图片描述
某一个字符 在字符串内 第一次、最后一次出现的位置。

拆分:按照某种特定的符号、字符 去拆。拆分出来的数据用数组去接收。
在这里插入图片描述

拆分2:
在这里插入图片描述
全部改成大写:
在这里插入图片描述

全部改成小写
在这里插入图片描述

去空格。(当输入密码的时候会不自觉的加一些空格)
在这里插入图片描述
在这里插入图片描述
false.

通过trim去掉首尾空格。
在这里插入图片描述

StringBuffer和StringBuilder

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

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

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

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

在这里插入图片描述
StringBuffer也处理过toString的问题,可以处理地址,输出的是值不是地址

append 拼接方法。从堆(字符串缓冲区)里取出值 修改后再返回字符串缓冲区
在这里插入图片描述

StringBuilder

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

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

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

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

练习:
在这里插入图片描述
1.在这里插入图片描述

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

4.Arrays.sort(shuzu)

5、在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/88529806