java阶段性总结

时间:2022-09-01 00:28:16

1 关键字:protected :同包或不同包的派生继承关系;

                    Package:同包;

2数据的类型:

2.1基本数据类型:(放在栈上,速度快)

整数类型:int(4字节),long(8字节),short(2字节),byte(1字节);

小数类型:float(单精度),double(双精度);

字符类型:char(2字节,可以存储汉字)

布尔类型:boolean;

2.2引用数据类型(放在堆上,灵活)

类类型

数组

接口类型

3运算符

|也可以代表或者的意思;

|与||的区别:

||是短路的,前面判断为真则不判断后面条件.|为非短路的,所有条件都会判断一遍;

Switch()语句1.7后才能传字符串;

4面向对象

多态:相同的操作作用在不同的对象上,产生了不同的状态;

类:是相同的属性和行为抽象出来的一个模板;

对象:是模板的实例化;

Format语句:Stringstr=String.format(“”,size);

基本数据类型不赋值会自动初始化,自定义数据类型不赋值会报空值错误;

如果不写构造函数,系统会有默认的无参构造函数;

一旦定义了有参构造函数,系统默认的无参构造函数会失效;

Super是父类中的构造函数,也可以调用父类中的属性和方法;

This代表本类中的实例,也可以调用本类中的构造函数;

重载:在同一个类中,方法的名字相同,参数不同;

在继承关系中,成员和方法都被继承了,包括私有属性。构造方法不继承;

Equals用来判断两个对象是否相等,根据地址判断,当重写equals方法时,必须重写HasgCode。

因为写集合会出现问题,集合的排序是通过HashCode来实现的,为了保证一些因为Hash算法优化得来的程序正常;

Final关键字:

1修饰类:让类没有子类,是最终类;

2修饰方法:父类中如果有被final修饰的方法,子类中不能重写;

3修饰变量:自能被赋值一次,一旦初始化不能修改;

4修饰参数:参数不能被修改;

抽象方法只能在抽象类中,抽象类中不一定有抽象方法;

一个非抽象类继承一个抽象类,一定要重写抽象方法;

抽象类无法被实例化;

向上转型会失去子类中的一些特性;

接口和抽象类的区别:

1接口是更高级的抽象,里面没有任何方法的实现,jdk1.8以后可以有一个默认的实现方法;

2抽象类里面可以有抽象的方法,也可以没有抽象的方法;

3一个类可以实现多个接口,类只能是单继承;

接口的用途:打标记,告诉虚拟机它是一个接口;

工厂设计模式;是功能的体现;

三种多态:

1子类对父类中方法的重写;

2非抽象子类对抽象父类方法的重写;

3接口中方法的实现;

包装类:基本数据类型的类,它的对象是引用类型,可以调用对象的方法,放在堆上;

异常:程序运行时发生的错误;

Throwable有两个子类,Exception和error,用户自定义异常用Exception;

Catch:先从小到大,先子类,后父类;

Finaly:不管发生什么异常,一定要执行的代码。通常放到文件的关闭和数据库的关闭;

Throw:抛出异常;throws:告知抛出对象的类型;

String字符串是常量,它们的值在创建一会不能更改,可共享,+法是拼接后重新指向它。

数字默认是int类型,但是可以直接赋给short型,但是int i=0;short j=i是错误的语法。

小数默认为double,如果想表示一个float类型,可以在后面加上f;

String:一个不变的字符序列;

StringBuffer:一个可变的字符序列,里面的方法都加了symchrouized,保证线程安全,效率会低。

StringBuilder:基本同stringBuffer,但它是线程不安全的,效率高。

当对字符串频繁操作时,用stringbuffer或stringbuilder;

操作日期的辅助类:calendar(抽象父类),GregorianCalendar(非抽象子类);

Arrays:数组的辅助类;

5 集合框架

线程不安全的:collection(i):存储一个个的数据;

                                                                                        List:存储有顺序的,重复的

                                             Set:没有顺序,不可重复

 

                          Map(i):存储键值对;

List:1 ArrayList:模拟数组,通过索引访问数据块,遍历效率高,插、删效率低;

    2 Liniked:链表

线程安全的:

Vector与ArrayList,但它是同步的;

HashTable与HashMap相似,但同时同步的;

泛型:

优点:类型安全,效率高;

Iterator/迭代器:保证迭代时删除的安全性;

将集合转换为数组:

Student []student=new student[0];

student=coll.toArray(student);

collections:不存储数据,它是集合的辅助工具类;

6 线程

1程序中的执行路径,有n条执行路径就有n条线程;

2一个进程里包含多个执行路径;

3超过一条执行路径,这个程序就是多线程;

4一个程序中至少有一条执行路径;

5 如果一个程序中只有一条执行路径,那么这条执行路径一定是主线程,一个执行程序有且只有一个主线程;

在什么地方使用:

1多任务同时进行的时候,一个任务可以为它开辟一个线程;

2 大任务的分解(上传,下载大文件);

线程的状态:

创建线程--à就绪态--à运行态--à阻塞态--à就绪态--à运行态

优先级:谁的优先级高,谁就可以优先获得执行资源。

饥饿:资源分配的原则有问题,导致某些线程无法获得资源;

可以通过继承Thread类实现继承

可以通过实现Runnable接口实现继承

如何正确停止线程:

1 通过内部条件找到终止点(例如计数器累加到n)

2通过外部条件改变子线程执行条件(点击或输入一个数字)

7 I/O流

四大顶层类:字节流:InputStream OutputStream 字符流:Reader、Writer

BufferedReader:临时存放在内存,效率高;

对象流操作:

1首先对象必须实现Serializable(实现序列化,如果序列化的对象继承其他父类,父类也必须实现此接口);

2创建对象(写操作,WriteObject)

3对操作(objectInputStream的readobject()方法);