系统类与Runtime讲解和StringBuffer而和StringBuilde

  • 常见包:
  • java.lang.* Java核心包(Sun公司提供) 主要包括:Object类型,String字符串处理类
  • 数据类型的包装类(Integer,Long……),Math类,System/Runtime类,类加载的加载器,
  • 异常等非常重要的API
  • java.util.* Java工具包 工具包中放置的是:日期,数组,数据结构类(栈,链表,向量,Hash表),集合,数学相关的一个工具API
  • 例如:Scanner,Arrays,Calendar……
  • java.awt.* /javax.swing.* 了解 提供了绘图和图像类,主要用于编写GUI程序,包括按钮、标签等常用组件
  • java.io.* /java.nio.* Java中用于系统的输入输出的相关类
  • java.net.* 网络通信包,实现网络应用程序的类,主要包括用于实现Socket通信的Socket类
  • java.applet.* 创建Applet程序提供的包,它包含了基本的applet类和通信类,目前基本上被废弃
  • java.* SUN公司开发的核心包 javax.|org. 一些开源组织开发的扩展包 com.* 一些商业组织开发的扩展包

*/
System 是指 : 操作系统,以及java平台的代表
Runtime 是指 : jvm的代表

起源于Unix系统 以unix诞生为准的
获取系统当前时间(毫秒值) System.out.println(System.currentTimeMillis());
从1970 - 01 - 01 00 : 00 :00 — 到至今的毫秒值

显示当前时间 控制台
System.out.println(new Date (System.currentTimeMillis()));

err属性主要用于错误信息的输出 以红色字体显示
System.out.println(System.currentTimeMillis());

System.in主要用于Scanner 输入
Scanner scr = new Scanner(System.in);
------------------------System方法--------------------------------

确定当前的系统属性
System.out.println(System.getProperties()); key = value

获取指定的系统属性 获取用户名
例 System.out.println(getProperty(“user.name”));

得到系统的换行符 /r
System.out.println(System.LineSeparator());

关闭jvm虚拟机 传值0 正常关闭 非0 不正常关闭
System.exit(0);

运行垃圾回收器 调用jvm提供的回收器 回收垃圾(没有引用的堆中的对象)
System.gc(); gc()属于 Runtime类。

开始时间 nanoTime () 取得的时间跟当前时间没有关系 仅当在java虚拟机的同一实例中获得的两个此类值之间的差异被计算是,此方法返回的值才会变得有意义。
Long end = System.nanoTime();
System.out.println(“执行时间”+(end - 当前时间))

Runtime 指的是 : 相对于应用程序而言,他是jvm虚拟的代表
每一个应用程序都有独立的Runtime。

获得虚拟机对象
Runtime runtime = Runtime.getRuntime();
Runtime.exec(“ 记事本.exe”) 使用虚拟机打开”记事本”的程序。
得到jvm从物理内存中申请的内存空间 申请的最大内存
Jvm从物理内存的申请的空间约占 申请内存/物理内存 = 1/4 (单位: MB)
System.out.println(run.maxMemory() /1024/1024);

得到当前应用程序正在使用的内存量 (单位 : MB)
System.out.println(run.totalMemory() /1024/1024);

得到当前jvm中剩余的内存空间 (单位: MB)
System.out.println(run.freeMemory() /1024/1024);

得到计算机处理器的数量
System.out.println(run.availableProcessors() );

String 字符串 (由字符组成的串(集合))
特点: 字符串一旦确定,那么内容,长度均不可变。
字符串的创建方法 : new String(); 字面量(最常用);
在编译期间就可以确定的量就是字面量。 字面量放置在方法区的静态常量池中。
字面量为Final(常量)
-------------------------------------------------第一种方式------------------------------------------------
String userName = “张三” ;
String address = “成都市九眼桥1号桥洞”;
String userName = “ 张三 ” ; 以字符的形式放置的{‘张’ , ’三’} char value[ ];

比如 user = “王” + ”五”; (输出 :王五 ) 只会产生一个对象“王五”。(因为编译器优化过)
又如 String a = “赵”; String b = “六”; userName = a+b; 三个对象(赵,六,赵六)

如果 String c = “赵六”; (userName == c)? 不等于 因为地址不一样
如 String d = c ; (d == c)? 等于 因为对象已经产生 地址赋值过去了

如果赋值给 d = “赵六”; 然后判断 d = c; (相等的)但是使用的相同的字面量在静态常量池中只有一个。意思就是只有一个赵六,只是d和c引用相同的地址。

-------------------------------------创建字符串对象的第二种方式-----------------------------------------

String e = new String(); 通过new 关键字产生的对象,放置在堆中
这句话有两个对象(赵六,和 new String()

如果给e赋值 “赵六”。再定义一个String 的对象 c = “赵六” ----- e =?c吗?
e 不等于c 对于引用数据类型,比较的是地址
c.equals(e) c等于e equals对于引用数据类型,先比较的地址,然后是值。
总结:
因为String是final,所以值不能改变,又因为String 是数组形式的,所以长度[数组长度]不能变。

String e = new String(“赵六”);
System.out.println(e.charAt(0)); 返回下标0 的值。
System.out.println(e.codePointAt(0)); 返回一个下标所在位置字符(int)类型的编码集

e = e.concat(“B”); 字符串拼接的方法(函数), 输出结果为: 赵六B

判断字符串以什么开始 什么结束
System.out.println(e.startsWith(“A赵”));
System.out.println(e.endWith(“B”));

System.out.println (Arrays.toString(e.getBytes())); 表示字符串中字符的字节码数组
System.out.println(e.indexOf(A)); 返回字符串某个字符所在下标的第一个位置

--------------------------------------------字符串的截取-----------------------------------------------------

e.substring(1); 表示截取从1开始的字符串。
e.substring(1,2); substring执行方式是:包扩前不包扩后(1包括,2不包括,须写3)

字符串的拆分
String userinfo = “张三-19-1-九眼桥2号桥洞”;
String[] strs = userinfo.split(“-”);
System.out.println(Arrays.toString(strs));

String str = “张三 ”;
System.out.println(str.trim()); 字符串去空格
System.out.println(str.contains(“三”)); 判断字符串中是否包括另外一个字符串
System.out.println(str.isEmpty(e)); str需要进行判断(最后一页提供判断方式) 判断一个字符串内容是否为空。
字符串数组排序
a = “ A ”;
b = “ B ”;
String[] names = {“A”,”D”,”C”,”E”,”B”,”张三”,”李四”,”张四”,”九眼桥”};
第一种冒泡排序 第二种选择排续 详情请打开6.18代码集 (只有升序 选择排序法)
字符串排序比较的是每个字符的Unicode编码的值 并不是拼音或是其他。

字符串的替换
a = “王二狗是一个好狗”;
System.out.println(a.replace(“狗”,”人”)); 结果 : 王二人是一个好人
System.out.println(a.toUpperCase()); 把英文全转换为大写
System.out.println(a.toLowerCase()); 把英文全转换为小写

StringBuffer和StringBufilder介绍
作用: 用的做多的是 作为对象的属性类型存在

1,新建用户类 有名字 年龄 成绩 钱
2 新建另外个类
UserBean user = new UserBean( );
给姓名 年龄 成绩 钱 这四个属性赋值 user.nam的形式

String类的缺点: 内容,长度,均不可变、
String str = “a”; String str + = “b”; String str + = “c”; String str + = “d”;
为了解决String缺点,java提供了两个可变的字符串操作类

StringBuffer,StringBuilder 主要是用于解决string类型的内容和长度均不可变的问题
他们采用前面所学的SuperArray(超级数组)的思想来进行动态扩容。

StringBuffer buffer = new StringBuffer(“张三”);原基础占16,张三占2个字节。一共有18个字节,用了2个,还剩16。
Buffer.append(“小妹妹,来给哥哥笑一个”); 11,还剩5,不需要扩容。
Buffer.append(“你笑不笑呢????”); 9 -4,需要扩容 StringBuffer可以解决扩容

System.out.println(buffer.capacity()); 查看StringBuffer的容量
System.out.println(buffer.length()); 得到StringBuffer中数组元素的个数
System.out.println(buffer.lINSERT(2,”李四”)); 表示在数组的2号位置新增元素
System.out.println(buffer.charAt(2)); 获得下标为2的位置的元素
System.out.println(buffer.reverse()); 数组头尾互换位置 列入 123变成321
System.out.println(buffer.replace(7,10,”小哥哥”)); 替换指定区间范围的下标的的字符
例入 把下标7到10的字符 换成小哥哥
System.out.println(buffer.delete(7,10)); 删除指定范围的字符 下标形式
例如 把下标7到10的字符删除

StringBufilder与 StringBuffer 大致类似
相同点: 定义是一样的
不同点: StringBuffer的方法使用 sunchronized 关键字进行了加锁
并且StringBuffer做了线程同步 而StringBufilder没有做。
线程同步: 可以保证数据准确性,每次只能由一根线程去操作该对象,反之数据的准确性无法保证。
实现原理 : 都是SuperArray自动扩容的方式
StringBufilder优点 : 线程同步 数据性安全 一次一线程 缺点 : 性能相对较差
StringBuffer优点 : 性能相对较高 缺点: 线程异步 数据线安全较弱
如何选择?
对数据准确性不高就用 StringBufilder 对性能要求较高就用 StringBuffer

StringBufilder bufilder = new StringBufilder();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值