Java基本类库、学习笔记

一、string成员方法(常用)

Ⅰ、

1、boolean equals(Object obj):判断字符串的内容是否相同,区分大小写。

2、boolean endsWith(String str):判断字符串对象是否以给定的字符串结束。

3、int length():获取字符串的长度

4、char charAt(int index):返回字符串中给定索引处的字符

5、int indexOf(int ch):返回指定字符在此字符串中第一次出现的索引

6、int indexOf(String str):返回指定字符串在此字符串中第一次出现的索引

 

7、lastIndexOf:最后一次出现的位置。

8、String substring(int start):截取字符串。返回从指定位置开始截取后的字符串。

9、String substring(int start,int end)截取字符串。返回从指定位置开始到指定位置结束截取后的字符串。

10、String toLowerCase():把字符串变成小写

11、String toUpperCase():把字符串变成大写

12、String replace(char oldChar,char newChar):用新的字符去替换指定的旧字符

 

13、String replace(String oldStr,String newStr):用新的字符串去替换指定的旧字符串

14、(*)String[] split(String regex):切割功能,注意正则表达式(以后讲)。把字符串用“,”分割

15、String trim():去除字符串两端空格

16、String是不可变的,因此上面的操作都是生成新的字符串对象,要用返回值去取新的字符串。

17、String s6 = s1 + s2 + s3 + s4 + s5;每次+都会生成一个String对象,当连接字符串比较多的时候就会产生一堆的临时字符串对象。占内存,降低程序效率。

使用StringBuffer拼接字符串则不会有临时字符串对象的问题:

StringBuffer sb = new StringBuffer();

sb.append(s1);

sb.append(s2);

sb.append(s3);

因为append方法把this返回了,还可以sb.append(s1).append(s2).append(s3);

最后使用String s = sb.toString()一次性生成拼接结果字符串即可

另:JDK1.5 增加了一个StringBuilder,用法和StringBuffer一样。StringBuffer是线程安全(*)的,效率略低;StringBuilder线程不安全,效率高,在大部分单线程环境使用StringBuilder会更好。

Ⅱ、数据类型

1、、使用instanceof判断变量指向的对象类型。

2、java中的int、double、boolean等基本数据类型不是类。

Java中内置提供了“包装类”(Wrapper):byte→Byte;short→Short;int→Integer;long→Long;float→Float;double→Double;char→Character;boolean→Boolean。

使用方法:

int包装成Integer(装箱):Integer i=new Integer(18);

int从包装中出来(拆箱):int i1 = i.intValue();

3、int等是基本数据类型,不能为null(没有指向任何对象);类变量可以是null。有时想表达“不知道数字是多少”的时候,用int任何值表示都不合适。Integer是类,因此可以为null,这样用null的Integer表示“没有赋值的整数、未知的整数”。

4、JDK 1.5之后int和Integer之间转换不需要new Integer/i.intValue()。如下即可:

Integer i = 123;//自动装箱

int i1= i;//自动拆箱

通过jd-gui进行反编译看上面的代码生成的class,得知是编译器帮着完成的装箱拆箱。

Ⅲ、时间

1、Java使用Date类(java.util包下)表示时间数据类型。

2、new Date()当前时间,也有new Date(System.currentTimeMillis()),看源代码,本质上是一样的。

3、可以通过Date的getYear()、getMonth()、getHours() 等得到日期的年、月、小时等部分;也可以setYear等来设置日期,但是属于@Deprecated(不推荐)的方法,因此尽量不要用。看文档提到了用Calendar

4、Calendar是抽象类,通过调用getInstance()静态方法得到一个当前时区、当前语言设置下的实例(猜测内部实现,打印cal.getClass()看一下返回的是哪个类的对象。这是一种设计模式),还可以使用getInstance()其他的重载获得其他时区、其他语言下的实例

5、根据DateTime得到各个部分:通过int get(int field)获得年月日小时分秒等部分,可选值Calendar的常量YEAR、MONTH、DAY_OF_MONTH(在月中的天数)、DAY_OF_WEEK(周中的天数,即周几)、DAY_OF_YEAR(一年中的第几天)、HOUR(12小时制)、HOUR_OF_DAY(24小时制)、MINUTE(分钟)、SECOND(秒)。也可以void set(int field, int value)方法进行修改。

 Calendar cal = Calendar.getInstance();  cal.setTime(new Date());  int day = cal.get(Calendar.DAY_OF_MONTH);

6、注意:Calendar的月份是从0开始。 创建Date、解析Date都不要用自身的方法,而要通过Calendar。

7、DateFormat用来把Date按照格式转换为String,它是抽象类,一般使用其子类SimpleDateFormat,使用SimpleDateFormat(String pattern)这个构造函数,传递一个格式字符串进去。

8、使用String format(Date date),把Date格式化为字符串;public Date parse(String source)把字符串解析为Date。

Ⅳ、异常

1、异常的根类为java.lang.Throwable,有两个直接子类java.lang.Error、java.lang.Exception。Error:程序本身无法恢复的严重错误,比如内存不足等,一般不需要对Error进行处理;Exception:可以被程序捕获并处理的异常错误,比如文件找不到。编程中需要处理的异常一般都继承自Exception,***Exception类。

2、异常的捕捉

try{ //可能发生问题的代码 }

catch(异常类型 异常变量)

{ //异常处理代码 }

finally{ //其他代码 }如:

try {     Integer i1=null;     int b = i1;     }

catch (NullPointerException e)

{         System.out.println("i1不能为null");     }

e就是发生异常的异常类对象,变量名只要不冲突就任意。 在异常处理中,一旦try里面有问题了。放弃try代码块中之后的代码,直接跳到catch里面执行。如果try代码后还有代码,则处理完catch后还会继续执行。

3、Throwable中的方法: public String getMessage():返回的是异常的消息字符串。 public void printStackTrace():把错误信息显示在控制台。

4、e.printStackTrace()并不是正确的处理异常的方式,要合理的识别异常类型,并且给出合适的处理,e.printStackTrace()只能让程序员知道“出错了”。

5、finally中一般进行资源的回收等。
-面试问题: final,finally的区别。

final:变量(不可重新被赋值)、方法(不能被override,重写)、类(不能被继承,不能有子类)
finally:异常捕捉中不论是否有异常,都能被执行,一般用于资源的回收

-finally里面的代码真的永远会执行吗?永远执行。但是有一个特殊情况:在代码执行到finally之前,jvm就退出了。

6、检查异常和非检查异常

非检查异常(Unchecked Exception)、检查异常(CheckedException)。RuntimeException为非检查异常,其他Exception子类都是检查异常(都要被处理:catch或throws)。

7、如果非RuntimeException不清楚catch住以后怎么处理合适或者不希望catch,那么可以用throws 声明到函数定义中“向上抛”

另外:还有自定义异常

Ⅴ、File文件处理

1、判断类型:

boolean isDirectory() 是文件夹

boolean isFile() 是文件

2、如果是文件夹:

① boolean mkdir():创建指定的目录,如果存在,就不创建。

② boolean mkdirs():创建指定的目录,如果存在,就不创建。这个时候,如果父目录不存在,它也会自动创建。

③ boolean delete():删除这个文件或者文件夹。如果你删除的文件夹下还有内容,那么,必须先把所有内容删除完毕后,再删除文件夹。直接删除,不会保存到回收站。

④ boolean exists():判断file对象是否存在

⑤ boolean canRead():判断file对象是否可读

⑥ boolean canWrite():判断file对象是否可写

⑦ String getAbsolutePath():绝对路径

⑧ String getPath():相对路径

⑨ String getName():文件名称

⑩ long length():文件大小,单位是字节

long lastModified():上次修改时间的毫秒值。

Ⅵ、文件系统的遍历:

public static File[] listRoots():列出可用的系统文件根目录

public String[] list():返回的是指定目录下所有文件或者文件夹的名称数组

public File[] listFiles():返回的是指定目录下所有文件或者文件夹对象数组

Ⅶ、流(Stream)

1、读取使用的InputStream,写入使用的OutputStream都是抽象类,网络、文件、加密等都是不同的子类,最常用的子类是FileInputStream、FileOutputStream。

2、使用Stream的时候虽然可以:FileInputStream fis = new FileInputStream(....)但是InputStream fis = new FileInputStream(...)更好,在使用的变量类型提供的操作能满足的前提下,尽可能用父类、接口声明变量。

3、从父类中继承的子类异常,只要throws父类异常即可

4、OutputStream写入的单位是byte(字节),char转换为byte时候,一个英文char转换为一个byte(对应的ASCII码),一个中文char转换为两个byte(*采用Unicode编码)

5、直接把IOException throws 声明抛出是不负责的,如果write的发生异常,fos就不会被close了,其他程序就无法写入这个文件了,也会占用资源。

6、资源要使用完毕才能close,一旦close之后就操作就会出错。

7、字节流不适合读取内容中包含中文的文本文档,容易造成数据错乱(byte[]中含有一半的汉字)。要用字符流。

8、复制文件:使用FileInputStream 、FileOutputStream 配合完成文件拷贝:从源文件的FileInputStream 中读取一部分内容,再写入到目标文件的FileOutputStream 中。

Ⅸ、Reader、Writer(文本内容)

1、直接用InputStream/OutputStream(字节流)进行文本文件的读写会比较麻烦,因为要考虑文件的编码、中文字符等的问题。

2、Reader、Writer是用来读写字符流(character stream)的类,会帮着自动处理麻烦的问题。Reader、Writer是抽象类,有很多子类,最常用的就是InputStreamReader、OutputStreamWriter,用来基于InputStream/OutputStream进行读写。

3、最常见的是GB2312(国家标准,表示汉字)、GBK(GB2312的扩展,还能表示繁体字等)、UTF-8(国际标准)、UTF-16等。

另:读取的编码由InputStreamReader构造函数决定。

4、直接使用InputStreamReader、OutputStreamWriter进行读写仍然是逐字符的进行,可以用Reader、Writer的另外子类BufferedReader、BufferedWriter配合读写,好处:

① 不是一个字符一个字符的读写,而是用缓冲区,效率更高;it is advisable to wrap a BufferedWriter around any Writer whose write() operations may be costly

② 方便逐行处理:readLine、newLine

5、① 注意关闭的顺序:如果 先关闭Stream,那么Writer就可能还没有把缓冲的数据写入,那只能强制writer.flush

② 应该先关闭Writer(关闭之前把没有写入的自动flush写入)这样就不用手动flush,Stream关闭之后就写入不了东西了

③ 先关闭依赖的、再关闭被依赖的:BufferedWriter→OutputStreamWriter→OutputStream。

6、读取配置Properties

① 服务器的IP地址等信息写死到代码中不方便,每次修改都要改代码、编译然后用户重新安装,如果能直接把这些配置信息写到文件中,改一下文件中的值程序读取新值就很方便。

② properties文件是以=分割的一行行的数据

 

 

转载于:https://my.oschina.net/8824/blog/880439

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值