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()方法);