FKJAVA读书笔记--第七章--与运行环境的交互

来源:互联网 发布:cpp socket编程 编辑:程序博客网 时间:2024/05/29 21:33

1.Scanner类的使用:可以获取键盘输入,也可以读取文件内容,它是一个基于正则表达式的文本扫描器。

 

2.BufferedReader类的使用:与Scanner不一样的地方,它不能识别输入的基本类型。并且它只能处理字符流,所以system.in获取的字节流需要用inputStreamReader包装。

 

3.利用SystemRuntime类可以与程序运行的平台进行交互

l  System类:代表了java程序运行的平台

一、利用system.getenv()可以获取环境变量

二、System.identityHashCode()返回的是根据对象地址得到的hashcode值,这个比hashcode精确,任何两个对象的identityHashcode值都是不相等的。Java的一般object类的hashcode方法都是实现的identyHashcode方法

l Runtime代表了java程序运行时的环境

一、可以通过Runtime.getRuntime获取到runtime对象,然后获取到此时系统的一些属性(内存,处理器情况等。。。)

二、可以单独启动一个进场操作系统命令:runtime.exec();

 

4.String类重写了hashcode类,只要两个String对象的值得字符序列相同,他们的hashcode即会一样

 

5.java常用类:

l Object类:一般常用的方法:equalshascodegetClasstoStringwaitnotifynotifyAll等等。。

Object还有一个用protected修饰的方法:clone();实现步骤:

1.实现Clonable接口  这个是个空接口

2.自定义类实现自己的clone方法

3.实现clone方法时,通过super.clone()来得到该对象的副本,并返回。

Javaclone的克隆只是一个浅克隆,不会对引用类型的field值所引用的对象进行克隆。

 

l Objects类:(java习惯为工具类加一个arrayscollections

 this.user=Objects.requireNonNull(user);加入了传参时的空指针校验

 

l StringStringBufferStringBulider:

一、String 不可变类,创建到销毁都不可以被改变 

1) Int compareTo方法:如果字符序列一样,返回0;否则返回第一个不相等字符差,如果刚巧较长字符串前面恰好是较短的字符串,则返回长度差。

二、StringBuffer对象表示一个字符序列可变的字符串,可以通过其appendinsertreserve。。。方法改变这个字符序列的顺序,一旦通过StringBuffer生成了理想的字符串,可以调用其toStirng方法转换成String类型。

三、StringBuilderStringBuffer差不多,但是StringBuffer是线程安全的,而StringBuilder不是,所以StringBuilder的性能更高。因此我们在保证线程是安全的情况下,应该优先使用StringBuilder

四、StringBuilder或者StringBuffercapacity属性通常比length

 

l Math:

 

l “Java7ThreadLocalRandom”与Radom类:

一、Random有两个构造器,一个使用默认的种子生成随机数,一个使用程序员显式的传入的值。

二、ThreadLocalRandom使用类方法current方法获取该对象。

 

l BigDecimal类:

通常预先要使用String的构造器。

创建BigDecimal对象时,不要直接使用double浮点数作为参数来调用bigDecimal对象构造器,否则一样有精度丢失的情况

 

l Date

一、构造器:Date()、 Datelong date

二、比较两个日期的大小compareTo    Boolean afterboolean before

升级版的Date类:Calender类:

一、add get、类似于addroll(不会影响前面的字段)、set

要注意的是set方法中的Moth字段是从0开始,即0代表1

Set方法有延迟性。

Calendaraddroll方法有区别:

Add修改的话,上一个字段会增大,比如月数增加,那么增加到12,年数会加1

Roll修改的话,上一个字段是不会增加的。

 

l TimeZone类:抽象类,只能通过getDefualtgetTimeZone获取实例。

 

l Pattern Matcher类:

      Pattern pattern=Pattern.compile("a*b");

      Matcher matcher=pattern.matcher("aaaaab");

      System.out.println(matcher.matches());===true

 

l 国际化:Locale类、ResourceBundle

ResourceBundle bundle=ResourceBundle.getBundle(“文件名”,locale对象);

 

l MessageFormat类:自动补全一些字段

    Eg: String str="你好 ,{0},现在是:{1}";

         System.out.println(MessageFormat.format(str, "guxuewu",new Date()));

 

l 另外两个Format类:DateFormatNumberFormat

    

DateFormat format=DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);

System.out.println(format.format(new Date()));

        

String str="2014128";

System.out.println(DateFormat.getDateInstance(DateFormat.LONG).parse(str));

l SimpleDateFormat类:

    SimpleDateFormat format=new SimpleDateFormat("Gyyyy年中第D");

    System.out.println(format.format(new Date()));

  

6.因为String是不可变类,所以下面的代码会产生三个对象:

 String str1=”sdfs”;

 Str1=str1+”sfsf”;

 Str1=str1+”sfsfsd”;

 如果用StringBuffer或者StringBuilder就不会出现这个问题。

0 0
原创粉丝点击