API手册查询方法这里的每一个API方法都是独立的,一个没有记住不影响另外的API的使用
官方API手册
当一个构造方法嵌套层次较多时,可以从外往内分析,先查API手册看最外层的类的构造方法所需要的参数
- 查API手册
- 在IDEA中点击两次Shift打开IDEA工具的搜索框,选中右上角的include non-project items
- 在IDEA左侧External Libraries里面找到jdk1.8-> rt.jar->java.lang.Object
- hashCode() 哈希码值
本方法的作用是返回对应对象的int类型的哈希值,力求不同的对象返回不同的哈希值,这样就可以根据哈希值区分不同的对象。 - toString() 对象默认的输出内容,在各种ide中都可以自动生成,比如IDEA中Generate->toString()
使用System.out.println()方法时,会调用对象的toString()方法,默认会打印对象的getClass().getName() + "@" + Integer.toHexString(hashCode()); - equals()与hashCode要保持一致,要重写都重写,要不重写都不重写。
如果不重写:
- hashCode()根据地址值生成
- equals()底层使用==
String如果重写:
3. hashCode()根据重写后各属性值生成
4. equals()比较的是重写后类型+所有属性值
- 不可变、不可继承官方文档
public final class String implements java.io.Serializable, Comparable, CharSequence { private final char value[]; }
- 创建String对象的方式
- char[] values = {'a','b','c'};String s = new String(values);使用此种方式每次都会在堆中创建一个新的对象
- String s = "abc";推荐使用此种方式,写法简单,且字符串会入池。效果:第一次创建会正常放入常量池,但第二次创建时就不会再次创建了,使用的是之前创建好的值。
关于常量池相关的知识
深入解析String#intern
What is Java String interning?
- String s = new String("abc");使用此种方式每次都会在堆中创建一个新的对象
- equals() String类已经重写了此方法,比较的是两者的字符的值,即相同内容的String将会返回true
- hashCode()返回哈希值。String已重写了此方法,根据字符串的具体内容生成哈然值。所以只要字符串的内容相同,则其生成的哈希值也相同。
- int length()返回此字符串的长度,返回的是字符的个数,中英文都是按一个字符算returns the number of characters contained in the string object
- toUpperCase() 返回所有小写字符转成大写后的字符串
- toLowerCase() 返回所有大写字符转成小写后的字符串
- boolean startsWith(String prefix)判断字符串是否以prefix开头
- boolean endsWith(String suffix) 判断字符串是否以prefix结尾
- char charAt(int index) 返回char格式的指定索引处的字符
- int indexOf(String str[, int fromIndex]) 返回当前字符串中str第一次出现的位置,fromIndex参数是可选的,意思是从fromIndex索引开始查找str第一次出现的位置,可用于查找第二次等出现的位置。
- int lastIndexOf(String str[, int fromIndex]) 返回当前字符串中最后一次出现str的位置,fromIndex参数是可选的,指在[0,fromIndex]范围内查找最后一次出现str的位置
- String concat(String str) 返回当前字符串与str拼接后的新串
- String[] split(String regex) 按指定的regex将当前字符串拆分成一个字符串数组
regex为""时,返回逐个字符拆开后的数组,即"abc".split("");// ['a','b','c']
regex出现在末尾时,也不会出现空元素,即"abcb".split("b");// ['a','c']
regex一次也没有出现时,会返回只有一个当前字符串的数组,即"abc".split("d");// ['abc']
regex 支持转义字符 t n等都可以使用。正则表达式
- String trim() 返回去掉了开头和结尾处的ASCII值<=u0020,也就是char值小于' '空格的char值的字符之后的新串,通过观察可以发现常遇到的如’n’:10、t:9、r:13这些还有一些其他的不可见与控制字符都是在空格之前的,因此一般使用trim()方法后基本可以确定剩下的就是可见字符开头和结尾的了。
- byte[] getBytes()把字符串存储到一个新的 byte 数组中
String, StringBuffer, and StringBuilder
- 特点:
- 封装了char[]数组
- 是可变的字符序列
- 提供了一组可以对字符内容修改的方法
- 常用append()来代替字符串做字符串连接”+”
- 内部字符数组默认初始容量是16:super(str.length() + 16);
- 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2;
- StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全
正则表达式
- 用途:主要用于校验数据
String str = "a";a.matches(regex);
- 基本类型没有任何功能,只是记录值,把基本类型进行包装,可以提供更加丰富的功能。
- 构造函数
new Integer(int i)
Integer.valueOf(int i) 使用此种方式创建对象数据在 -128 ~ 127 范围内可以让引用变量直接指向缓存池内的对象,因此两个引用变量都使用此种方式赋值为相同的值时,两者使用==比较时结果为true - static int parseInt(String s) throws NumberFormatException将字符串参数作为有符号的十进制整数进行解析。除了第一个字符可以是用来表示负值的 ASCII 减号 ‘-’ (’u002D’) 外,字符串中的字符都必须是十进制数字。返回得到的整数值,就好像将该参数和基数 10 作为参数赋予 parseInt(java.lang.String, int) 方法一样。
构造方法摘要
Double(double value) 构造一个新分配的 Double 对象,它表示基本的 double 参数。
Double(String s) 构造一个新分配的 Double 对象,表示用字符串表示的 double 类型的浮点值。
- Double 没有缓存池,因此没有所谓高效的效果
- static double parseDouble(String s)返回一个新的 double 值,该值被初始化为用指定 String 表示的值,这与 Double 类的 valueOf 方法一样。
- 自动装箱:
Integer i = 127;编译器会自动把基本类型int 127 包装成包装类型Integer,然后交给Integer的类型的变量来保存,底层发生的代码实际是:Integer.valueOf(127); 自动装箱的方向 int【基本类型】 => Integer【包装类型】 - 自动拆箱:
int i1 = i;编译器会自动把包装类型i拆掉“箱子”,变回基本类型的数据127,然后交给基本类型的变量i1来保存,底层代码:int i1 = i.intValue();,自动拆箱的方向:Integer【包装类型】 => int【基本类型】
本类常用来解决精确的浮点数运算不精确的问题
- 构造函数
public BigDecimal(String val)
public BigDecimal(double val) 此种方式不推荐,在转换过程中可能会出现问题,如果确实需要传入double,可以使用new BigDecimal(doublevalue+"");的方式来避免不精确的问题
此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入 到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
- 常用的四则运算
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)此方法在除不尽时会抛出算术异常,因为没有办法精确表示结果,解决方案:需要额外设置除不尽时的保留位数和舍入方式。divide(a,b,c);
public BigDecimal divide(BigDecimal divisor,
int scale,
RoundingMode roundingMode)返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。
参数:
divisor - 此 BigDecimal 要除以的值。
scale - 要返回的 BigDecimal 商的标度,就是保留位数。
roundingMode - 要应用的舍入模式。
舍入方式解析
ROUND_HALF_UP 四舍五入,五入 如:4.4结果是4; 4.5结果是5
ROUND_HALF_DOWN 五舍六入,五不入 如:4.5结果是4; 4.6结果是5
ROUND_HALF_EVEN 公平舍入(银行常用)参考银行家舍
比如:在5和6之间,靠近5就舍弃成5,靠近6就进位成6,如果是5.5,就找偶数,变成6
ROUND_UP 直接进位,不算0.1还是0.9,都进位
ROUND_DOWN 直接舍弃,不算0.1还是0.9,都舍弃
ROUND_CEILING(天花板) 向上取整,取实际值的大值
朝正无穷方向round 如果为正数,行为和round_up一样,如果为负数,行为和round_down一样
ROUND_FLOOR(地板) 向下取整,取实际值的小值
朝负无穷方向round 如果为正数,行为和round_down一样,如果为负数,行为和round_up一样
Scanner sc = new Scanner(System.in); System.out.println("请输入两个小数:"); double a = sc.nextDouble(); double b = sc.nextDouble(); BigDecimal bd1 = new BigDecimal(a+""); BigDecimal bd2 = new BigDecimal(b+""); System.out.println("+"+bd1.add(bd2)); System.out.println("-"+bd1.subtract(bd2)); System.out.println(bd1.multiply(bd2)); System.out.println("/:"+bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP));高级API IO
Stream File学习方式:学习父类的公共方法,学习子类对象的创建方式
- new File(String path);只会在内存中创建一个File类型的对象,并不会在对应路径下创建一个真实的文件
path 为 时路径为当前磁盘的根目录 如D:
path 为 “” 时,路径为当前Project所在目录 ,如D:PersonalCGB210901
-
isDirectory() 是否是文件夹,当exists()方法返回false时,isDirectory()和isFile()都会返回false
-
length() 返回文件的大小,与windows系统中右键查看显示的字节数一致
-
isFile() 是否是文件
-
getName() 获取文件名字或文件夹的名字
-
getParent() file是文件时获取到的是D:a,如果是文件夹,获取到的是上一级目录 D:a,反正获取到的都是没有最后面的斜线的
-
getAbsolutePath() 获取绝对路径,最后面是没有斜线的
-
exists() 是否存在 ,实际工作过程中请先使用此方法进行存在性判断,再做后续的处理。
-
boolean createNewFile() 返回:如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false .。会有IOException检查异常,需要处理掉才可以通过编译,否则报错。如果写的路径格式不正确,可能会报这个IOException异常
-
mkdirs() 创建多层文件夹
-
mkdir() 创建文件夹
-
delete() 删除文件或空文件夹
-
list() 文件及文件夹名字的数组
-
listFiles() 返回当前文件夹下的所有文件的数组,如果当前文件夹不存在或当前并非文件夹,则该方法返回的是Null
- new FileInputStream(File fiile);
- new FileInputStream(String path);
- read(); 从输入流读取数据的下一个字节。值字节作为0到255范围内的整数返回。如果由于到达流的结尾而没有字节可用,则返回值-1。此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常为止。
InputStream in = null; try { //创建流对象,注意 InputStream是抽象父类,不可以实例化 //InputStream fin = new FileInputStream(new File("d:\a.txt"));//这种方式也可以,但是不常用,因为会创建一个File对象,浪费空间 in = new FileInputStream("d:\a.txt"); int read; //循环读取数据,只要读到的数据不等-1,说明还有数据,符合循环条件,继承循环 while ((read = in.read()) != -1) { System.out.println(read + " " + Integer.toBinaryString(read)); } in.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close();// 关流 *** 作也有可能会抛出异常,因此也需要捕获 } catch (IOException e) { e.printStackTrace(); } }BufferedInputStream
InputStream in = null; try { in = new BufferedInputStream(new FileInputStream("D:\a.txt")); int b; while ((b = in.read()) != -1) { System.out.println(b); } } catch (Exception e) { e.printStackTrace(); }finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } }Reader FileReader
Reader reader = null; try { reader = new FileReader("D:\a.txt"); int read; while ((read = reader.read()) != -1) { char c = (char)read; System.out.print(c); } } catch (Exception e) { e.printStackTrace(); }finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } }BufferedReader
BufferedReader br = null; try { br = new BufferedReader(new FileReader("D:\a.txt")); String line; while ((line = br.readLine()) != null) { System.out.print(line); } } catch (IOException e) { e.printStackTrace(); }finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } }OutputStream FileOutputStream、 BufferedOutputStream
- FileOutputStream的重载构造方法里面有一个boolean append的参数,如果 true则使用追加写入。
OutputStream out = null; try { out = new BufferedOutputStream(new FileOutputStream("D:\a.txt",true));// boolean append out.write(97); } catch (IOException e) { e.printStackTrace(); }finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } }
BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter("D:\a.txt", true)); writer.write("中国"); } catch (IOException e) { e.printStackTrace(); }finally { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)