38.常用类
来源:互联网 发布:陈炳勇力量数据 编辑:程序博客网 时间:2024/06/15 20:55
1.String
(1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法
(2)String类其实是通过char数组来保存字符串的。
(3)2.使用String的时候应该注意的问题:尽量不要做字符串频繁凭借操作。 因为字符串一旦创建不可改变,只要频繁拼接,就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题
(4)常用方法
public class HelloWorld { public static void main(String[] args) { String s1 = " gyc,abc "; char c1 = s1.charAt(2);//返回字符串指定字符 System.out.println(s1.endsWith("c"));//判断字符串是否以某个字符串(或字符)结尾 System.out.println(s1.equalsIgnoreCase("GYC"));//判断字符串是否相等,忽略大小写 System.out.println(s1.indexOf("c"));//判断子字符串在字符串中第一次出现处的索引 System.out.println(s1.indexOf("c", 3));//判断子字符串在字符串中第一次出现处的索引,从指定索引开始 System.out.println(s1.lastIndexOf("c"));//判断子字符串在字符串中最后一次出现处的索引 System.out.println(s1.length());//数组中是length属性,String是length()方法 String[] s2 = s1.split(","); for(int i = 0; i<s2.length;i++) System.out.println(s2[i]);//以逗号分割字符串,并将字符串数组输出 System.out.println(s1.startsWith("g")); //判断是否以某个字符串开始 System.out.println(s1.substring(2,6));//返回一个新字符串,它是此字符串的一个子字符串 char[] c2 = s1.toCharArray(); for(int i =0; i<s1.length();i++) System.out.print(c2[i]+" ");//字符串转化成char数组 System.out.println(s1.toUpperCase());//转大写 System.out.println转小(s1.toLowerCase());//写
System.out.println(s1.trim());//返回字符串的副本,忽略前导空白和尾部空白 Object o = null; System.out.println((String.valueOf(o)));//等同于 System.out.println(o),不会出现空指针异常,因为String.valueOf(o)这个方法对空值进行处理了 //System.out.println(o.toString());// 会出现空指针异常 } }
2.StringBuffer Stringbuilder
(1) StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
(2) 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
(3) 对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就 要稍微慢一些。
(4)工作原理:预先在内存中申请一块空间,以容纳字符序列, 如果预留空间不够多,则进行自动扩容,以容纳更多字符序列
(5)Stringbuffer和Stringbuilder区别
StringBuffer是线程安全的(可以在多线程环境下使用不会出现问题)
StringBuilder是非线程安全的(在多线程环境下使用可能出现问题)
package test2;public class Outer { public static void main(String[] args){ StringBuffer sb = new StringBuffer("this is a stringbuffer"); System.out.println(sb.insert(4, "a" ));//插入 thisa is a stringbuffer System.out.println(sb.insert(4, new char[] {'a','b','c'}));//thisabca is a stringbuffer System.out.println(sb.insert(2, 3 ));//th3isabca is a stringbuffer System.out.println(sb.replace(27, sb.length(), "hahahah"));//代替 th3isabca is a stringbufferhahahah System.out.println(sb.append(" really?"));//追加 System.out.println(sb.insert(2, 3 )); System.out.println(sb.delete(0, sb.length()-1));//删除 ? }}
3.Scanner类
(1)当通过Scanner scan = new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。
package test2;import java.util.Scanner;public class Outer { public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.println("请输入:"); while(true) { String line = s.nextLine(); if(line.equals("q"))break; System.out.println(">>>"+line); } }}
(2)Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符
package test2;import java.util.Scanner;public class Outer { public static void main(String[] args){ Scanner s = new Scanner("asdas,as sad,sd s"); s.useDelimiter(",");//以逗号作为分隔符 while(s.hasNext()) { System.out.println(s.next()); } }}
(3)实用方法
delimiter()
返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
hasNext()
判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine()
如果在此扫描器的输入中存在另一行
next()
查找并返回来自此扫描器的下一个完整标记。(按标记进行输出)
nextLine()
此扫描器执行当前行,并返回跳过的输入信息。( 一行一行输出)
4.System类
(一)System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
(二)成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
(三)成员方法
(1)arraycopy()方法:复制数组
(2)currentTimeMillis()方法:当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
(3)exit():该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
(4)gc()方法:该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
(5)getProperty()方法:该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示。
属性名
属性说明
java.version
Java 运行时环境版本
java.home
Java 安装目录
os.name
操作系统的名称
os.version
操作系统的版本
user.name
用户的账户名称
user.home
用户的主目录
user.dir
用户的当前工作目录
package test2;import java.util.Scanner;public class Outer { public static void main(String[] args){ int[] a = {1,2,3,4}; int[] b = new int[5]; System.arraycopy(a,0,b,0,3);//从a的第0个,b的第0个,拷贝3个 for(int i:b) { System.out.println(i); } System.out.println(System.currentTimeMillis());//毫秒数 Scanner s = new Scanner(System.in); System.gc(); //System.exit(0); System.out.println(System.getProperty("java.version")); } }
5.Runtime类
Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。
当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。
package test2;public class Outer { public static void main(String[] args){ Runtime rt = Runtime.getRuntime();//不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。 System.out.println("处理器数量:"+rt.availableProcessors()); System.out.println("JVM总内存:"+rt.totalMemory()); System.out.println("Jvm空闲内存数: "+ rt.freeMemory()+" byte"); System.out.println("Jvm可用最大内存数: "+ rt.maxMemory()+" byte"); } }
6.Object类
(1)java.lang.Object
java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。
Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。
Object类是Java中唯一没有父类的类。
其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。
(2)Object类有12个成员方法,按照用途可以分为以下几种
1,构造函数
2,hashCode和equale函数用来判断对象是否相同,
3,wait(),wait(long),wait(long,int),notify(),notifyAll()
4,toString()和getClass,
5,clone()
6,finalize()用于在垃圾回收
(3)clone()函数:另存一个当前存在的对象。
深克隆与浅克隆的区别就是,浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向。深克隆则拷贝了所有。也就是说深克隆能够做到原对象和新对象之间完全没有影响。
(4)hashCode()和equale()
关于Object类 中的equals方法
通过查源代码:public boolean equals(Object obj) {
return (this == obj);
}
this:o1 obj:o2 两个引用的内存地址不同,返回值为false
设计目的:判断两个对象是否一样
public class test { public static void main(String[] args) { //创建一个Object类型的对象 Object o1 = new Object(); Object o2 = new Object(); boolean b1 = o1.equals(o2); System.out.println(b1);//false Star s1 = new Star(100, "gyc"); Star s2 = new Star(100, "gyc"); System.out.println(s1.equals(s2));//第一次false,重写后true } } class Star { int id; String name; public Star(int id, String name) { this.id = id; this.name = name; } //Object中的equals方法中比较的是内存地址,在现实业务逻辑中,不应该比较内存地址,应该比较内容 //所以Object中的equals方法也要重写 //如果身份证号和名字一致,则为true public boolean equals(Object obj) { if (this == obj)return true; if(obj instanceof Star){ Star s = (Star)obj; if (s.id == id && s.name.equals(name)){ return true; } } return false; } }
(5)Tostring()方法
关于Object类 中的tostring方法
SUN在Object类中设计toString方法的目的:返回Java对象的字符串表示形式
print方法后括号内如果是引用数据类型,默认调用引用类型的toString方法
在现实开发过程中,Object里边的toString方法已经不够用
因为Object的toString方法实现的结果不满意
package test2;public class Outer {public static void main(String[] args) {Person p1 = new Person("张三",18);Person p2 = new Person("张三",18);System.out.println(p1.equals(p2));}}class Person{public Person() {}int age;String name;public Person(String name,int age) {this.name = name;this.age = age;}public boolean equals(Object obj) {if(this == obj)return true;if(obj instanceof Person) {Person s = (Person)obj;if(s.age == age && s.name.equals(name)) {//String已经重写了equals方法,也是比较的内容return true;}}return false;}(6)finalize()方法
3.关于Object类 中的finallize方法
finalize方法什么时候调用?
1.finalize方法每个对象都有
2.finalize方法不需要程序员去调用,由系统自动调用
3.Java对象如果没有更多的引用指向它,则该Java对象成为垃圾数据,等待垃圾回收器的回收,垃圾回收期在回收这个Java对象之前会自动调用该对象的finalize方法
public class test { public static void main(String[] args){ Person p1 = new Person(); p1 = null;//没有引用再指向它,等待回收 //程序员只能建议垃圾回收器回收垃圾 System.gc(); } } class Person { //重写object中的finalize方法 public void finalize() throws Throwable { System.out.println(this + "马上就要被回收了"); } }
7.math类
public class MathDemo { public static void main(String args[]){ /** * abs求绝对值 */ System.out.println(Math.abs(-10.4)); //10.4 System.out.println(Math.abs(10.1)); //10.1 /** * ceil天花板的意思,就是返回大的值,注意一些特殊值 */ System.out.println(Math.ceil(-10.1)); //-10.0 System.out.println(Math.ceil(10.7)); //11.0 System.out.println(Math.ceil(-0.7)); //-0.0 System.out.println(Math.ceil(0.0)); //0.0 System.out.println(Math.ceil(-0.0)); //-0.0 /** * floor地板的意思,就是返回小的值 */ System.out.println(Math.floor(-10.1)); //-11.0 System.out.println(Math.floor(10.7)); //10.0 System.out.println(Math.floor(-0.7)); //-1.0 System.out.println(Math.floor(0.0)); //0.0 System.out.println(Math.floor(-0.0)); //-0.0 /** * max 两个中返回大的值,min和它相反,就不举例了 */ System.out.println(Math.max(-10.1, -10)); //-10.0 System.out.println(Math.max(10.7, 10)); //10.7 System.out.println(Math.max(0.0, -0.0)); //0.0 /** * random 取得一个大于或者等于0.0小于不等于1.0的随机数 */ System.out.println(Math.random()); //0.08417657924317234 System.out.println(Math.random()); //0.43527904004403717 /** * rint 四舍五入,返回double值 * 注意.5的时候会取偶数 */ System.out.println(Math.rint(10.1)); //10.0 System.out.println(Math.rint(10.7)); //11.0 System.out.println(Math.rint(11.5)); //12.0 System.out.println(Math.rint(10.5)); //10.0 System.out.println(Math.rint(10.51)); //11.0 System.out.println(Math.rint(-10.5)); //-10.0 System.out.println(Math.rint(-11.5)); //-12.0 System.out.println(Math.rint(-10.51)); //-11.0 System.out.println(Math.rint(-10.6)); //-11.0 System.out.println(Math.rint(-10.2)); //-10.0 /** * round 四舍五入,float时返回int值,double时返回long值 */ System.out.println(Math.round(10.1)); //10 System.out.println(Math.round(10.7)); //11 System.out.println(Math.round(10.5)); //11 System.out.println(Math.round(10.51)); //11 System.out.println(Math.round(-10.5)); //-10 System.out.println(Math.round(-10.51)); //-11 System.out.println(Math.round(-10.6)); //-11 System.out.println(Math.round(-10.2)); //-10 } }
8.除了上面math类中的random,java.util.random类提供了更强大的功能
下面Random()的两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
package test2;import java.util.Random;public class Outer {public static void main(String[] args) {Random r = new Random(25);for (int j =0;j<10;j++) {int i = r.nextInt(100);System.out.println(i);}}}
9.Bigdecimal类
10.Date和Calendar类
(1)在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。
(2)Calender类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。
package test2;import java.util.Date; import java.text.SimpleDateFormat; import java.util.Calendar; /* */ public class Outer { public static void main(String[] args) throws Exception{ //获取自1970年1月1日 0时0分0秒0毫秒到当前毫秒数 1000毫秒 = 1秒 long now = System.currentTimeMillis(); //获取系统当前时间 Date nowTime = new Date();//Sun Sep 03 11:32:23 CST 2017 //以上程序说明java.util.Date;已经重写了Object中的toString方法 //以上日期格式不太容易理解,引入 “格式化日期”java.util.Date-->String SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS"); //Date-->String String strTime = sdf.format(nowTime); System.out.println(strTime);//2017年09月03日 11:55:45 274 //String-->Date String strTime1 = "2008年08月08日 08:08:08 888"; Date t =sdf.parse(strTime1); System.out.println(t);//Fri Aug 08 08:08:08 CST 2008 //获取系统当前日历 Calendar c = Calendar.getInstance(); //获取当前日历星期几(1代表星期日) int i = c.get(Calendar.DAY_OF_WEEK); //月 int m = c.get(Calendar.DAY_OF_MONTH); //获取2008年8月8日日历 String strTime3 = "2008,08,08"; Date d = new SimpleDateFormat("yyyy,MM,dd").parse(strTime3); //该日历就是2008年8月8日的日历 c.setTime(d);//setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。 //获取星期几 System.out.println(c.get(Calendar.DAY_OF_WEEK)); } }
- 38.常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 常用类
- 理解前端数据双向绑定原理——Object.defineProperty()
- Jredis--java使用redis
- oracle 10g的安装6.5
- 校验数据有效性工具类
- 谷歌搜索引擎优化必须知道的三个点
- 38.常用类
- docker官方父镜像制作
- PAM
- 与HTTP有什么区别?HTTPS的七个误解
- 常用换算
- 前端常见疑难杂症(部分google浏览器)
- shell脚本初入门必读
- phpunit 环境部署
- DOM事件&addEventListener