Java基础
1、Object
1.Object是所有类的根类,所有的类都是直接或者间接的去继承Object类。
根类:最上层的类
超类:根类和父类之间的类
2.类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
3.Object里面的方法:
(1)toString:
返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
(2)hashCod:
由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。每一个对象都有一个唯一的hash值。
(3)finalize:
用于垃圾回收,我们不用手动的去调用,由jvm来调用,
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
(4)equals:
==:
1.基本数据类型:比较的是值
2.引用数据类型:比较的是地址
2、字符串
字符串是类,是引用的数据类型
String str = “abc”;
这是定义了一个字符串的常量。常量是不可改变的量,字符串是不能改变的。
1.字符串常量是共享的
2.字符串不能变化,如果我们在字符串上做拼接,其实是新产生一个字符串。
空字符串和null的区别:空字符串是有效的引用,有地址的,只不过是内容的长度是0,null这个引用是空引用,不能使用。使用一定会报空指针的错误。引用数据类型的默认值是null。
字符串的常用方法:
1. boolean equals = s.equals(s1); //判断两个字符串的值是否相等
2. boolean empty = "".isEmpty();//判断一个字符串是否是空串
3.int length = s.length(); //获得一个字符串的长度
4.char[] chars = s.toCharArray();//把字符串转换成字符的数组
5. String s1 = s.substring(5, 8);//截取指定的开始索引和结束索引之间的字符串,包头不包尾
6.String[] s1 = s.split("\\-"); //把一个字符串按着某种字符拆分成数组(\\:防止转义字符)
3、可变字符串
StringBuffer创建后值可以变化(增删改),地址不会有变化,不会产生新的字符串。
多个线程同时操作同一个资源的时候,可能发生数据安全性的问题。
StringBuffer是线程同步的(线程安全的)。
注意:凡事有利就有弊,牺牲了性能。
追加:append
可变字符串的追加返回的都是这个可变字符串的本身的引用,所以通过链式方式来追加代码。
插入:insert
删除:delete
4、包装类
把基本数据类型转换成类,我们使用基本数据类型做进制转换很麻烦,对于临界值也不好判断,我们的包装类提供了很多方法供我们使用,这样会方便很多。
基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
Integer常用做类型直接的转换(Integer,int ,String)
Integer i = new Integer ( 10 ) ;
int i1 = i. intValue ( ) ;
Integer i2 = new Integer ( "55" ) ;
String s2 = i2 + "" ;
String s3 = i3 + "" ;
int i4 = Integer. parseInt ( s3) ;
注意:
System. out. println ( i == i1) ;
System. out. println ( i. intValue ( ) == i1. intValue ( ) ) ;
boolean equals = i. equals ( i1) ;
默认值:基本数据类型int 的默认值是0 ,Integer的默认值是null
5、自动装箱拆箱
装箱:把int类型转换正Integer--------------》new Integer(int i)
拆箱:把Integer转换成int------------》intValue()对象方法
装箱和拆箱是不需要我们主动调用的,是jvm自动给我们完成的。
其他的7种基本数据类型和Integer一样。
6、date
Date d = new Date ( ) ;
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss SSS E" ) ;
String format = sdf. format ( d) ;
String s = "1997/12/12 12:34:22" ;
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy/MM/dd HH:mm:ss" ) ;
try {
Date date = sdf. parse ( s) ;
System. out. println ( date) ;
} catch ( ParseException e) {
e. printStackTrace ( ) ;
}
7、集合
(1)List
1.List是有序的集合,就像我们的数组一样。我们可以把list理解为是一个长度可变的数组,而且提供了丰富的api。List的集合底层就是数组。
2.List的迭代器ListIterator
3.通过ListIterator的方式遍历
我们可以使用for循环来动态的遍历List集合
4.List中元素是可以重复的。
(2)ArrayList
ArrayList的底层是数组的原理。
ArrayList中的元素和可以重复
是有序的集合,长度不固定。
不是线程安全的。
效率高。
ArrayList在添加数据的时候初始的长度是10,后续会以5个长度来扩充集合的长度。ArrayList不是线程安全的集合,适合不要求线程安全的需求来实现。
好处是性能高。
缺点就是线程不安全,可能带来数据不准确。
如果线程要是同步的话,性能就会变低。
(3)LinkedList
Linked也不是线程安全的。
LinkedList是链表为原理,添加修改删除的性能高。
(4)Vector
Vector底层也是数组。
线程安全的。
8、文件
(1)文件构造器
File file = new File ( "D:\\tx.txt" ) ;
File file1 = new File ( "D:\\aaa" , "拓薪教育.txt" ) ;
File file2 = new File ( "D:\\aaa" ) ;
File file3 = new File ( file2, "拓薪教育.txt" ) ;
(2)创建文件
File file = new File ( "D:\\aaa\\hello.txt" ) ;
boolean newFile = file. createNewFile ( ) ;
File file = new File ( "D:\\aaa\\bbb" ) ;
boolean mkdir = file. mkdir ( ) ;
File file = new File ( "D:\\aaa\\ccc\\hhh\\ggg" ) ;
boolean mkdir = file. mkdirs ( ) ;
(3)文件删除
File file = new File ( "D:\\tx.txt" ) ;
file. delete ( ) ;
File file1 = new File ( "D:\\aaa\\bbb" ) ;
boolean delete = file1. delete ( ) ;
(4)文件判断
File file = new File ( "D:\\tx.txt" ) ;
boolean exists = file. exists ( ) ;
boolean isFile = file. isFile ( ) ;
boolean isDir = file. isDirectory ( ) ;
boolean absolute = file. isAbsolute ( ) ;
boolean b = file. canRead ( ) ;
boolean w = file. canWrite ( ) ;
boolean h = file. isHidden ( ) ;
(5)文件获取
File file = new File ( "D:\\tx.txt" ) ;
String absolutePath = file. getAbsolutePath ( ) ;
String path = file. getPath ( ) ;
String name = file. getName ( ) ;
long length = file. length ( ) ;
long l = file. lastModified ( ) ;
File[ ] files = File. listRoots ( ) ;
File file1 = new File ( "D:\\aaa" ) ;
File[ ] files1 = file1. listFiles ( ) ;
for ( File f : files1) {
System. out. println ( f) ;
}
String[ ] list = file1. list ( ) ;
System. out. println ( Arrays. toString ( list) ) ;
9、IO流
(1)概述
概述:IO(Input/Output):输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘的输入,再比如显示器就是输出设备,输出图像。
对于java来说输入输出问题,java将它抽象成流对象来解决。
以游戏程序为中心读取文件就是输入,写入文件是输出。
(2)分类
IO流在java中从输入输出角度分类:
1.输入流
2.输出流
IO流在java中从数据的角度来分类:
1.字符流
文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等
2.字节流
二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件,等等。
(3)案例(使用字符流向一个文件输入helloworld)
File file = new File ( "test.txt" ) ;
Writer writer = null;
try {
writer = new FileWriter ( file) ;
for ( int i = 0 ; i < 100 ; i++ ) {
writer. write ( "HelloWorld\r\n" ) ;
if ( i % 10 == 0 ) {
writer. flush ( ) ;
}
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
} finally {
if ( writer != null) {
try {
writer. close ( ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}