5、Java基础(3)

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、包装类

把基本数据类型转换成类,我们使用基本数据类型做进制转换很麻烦,对于临界值也不好判断,我们的包装类提供了很多方法供我们使用,这样会方便很多。
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
Integer常用做类型直接的转换(Integer,int,String)
 Integer i = new Integer(10);//int -->Integer
 int i1 = i.intValue();//Integer -->int
Integer i2 = new Integer("55");//String -->Integer
String s2 = i2 + "";//Integer -->String
String s3 = i3 +"";//int -->String
 int i4 = Integer.parseInt(s3);//String -->int
注意:   //包装类不能用 == 比较值
        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");
//java中的File类的对象可以代表目录,也可以代表文件
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();
//获得tx.txt的大小
long length = file.length();
//获得最后的修改时间
long l = file.lastModified();
//获得电脑磁盘的跟目录
File[] files = File.listRoots();
//获得一个目录下的子文件对象
File file1 = new File("D:\\aaa");
//获得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 {
            //IO流是需要关闭的,如果不这样设计就会不能关闭资源
            writer = new FileWriter(file); //writer = new FileWriter(file, true);追加
            for (int i = 0; i < 100; i++) {
                writer.write("HelloWorld\r\n");
                //每次写入10个helloworld的时候做一次flush
                if(i % 10 == 0){
                    writer.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值