JAVA基础--面试用
1、java中类名+方法名(){}
是普通方法的构造,是有返回值的,返回值是你的类名的对象.
(类方法==一般方法)
1.1 java中创建对象 类名 对象名=new 类名(); 后面的()什么意思
2、this关键字
例如:this.name=name;
当成员变量和局部变量重名,可以用this进行区分,this访问成员变量;
左边的name是对象的name,右边的name是局部变量,局部变量赋值给了对象的,就是赋值给了堆内存;
简单说:哪个对象调用了this所在的函数,this就代表了哪个对象;
方法中用了本类对象,全用this替代;
static关键字
static关键字的特点?
成员变量和静态变量的不同?
静态方法的注意事项:
1.静态方法只能访问静态成员;(非静态既可以访问静态,又可以访问非静态)
2.静态方法中不可以使用this和super关键字;
3.主函数是静态的;
静态方法什么时候使用?
静态代码块: 随着类的加载而执行,而且只执行一次;作用:用于给类进行初始化;
主函数解析:
3、继承
java不支持多继承,但是支持多层继承;C继承B,B继承A;
什么时候应用覆盖操作?
子类实例化过程;
4、final -----修饰符
5、抽象类
类的实例化就是可以拿类来new一个对象;
6、接口
当一个抽象类中的方法全部都是抽象的的时候,可以用借口的形式去定义和表示;
实现implements
类与类之间是继承关系,类与接口直接是实现关系;
接口不可以实例化。只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,改子类才可以去实例化。
多实现:一个类可以实现多个接口;
一个类在继承另一个类的同时,还可以实现多个接口;
接口的特点:
接口和抽象类的区别:
举例:
7、多态
对象的多态
代码举例:
父类的对象a不断指向父类的不同子类对象,就是多态的一种体现;
多态的转型
注意:对于转型,自始自终都是子类对象在做着类型变化。
向上转型目的是为了限制对特有功能的访问;
向下转型目的是为了使用子类中的特有方法;
多态成员的特点
8、封装
封装的好处:
9、构造函数
构造函数:构建创建对象时调用的函数;
构造函数与一般函数的区别?
什么是构造函数的重载?
函数名称相同,参数列表不一致;
10、多线程
线程就是进程中的一个负责程序执行的控制单元(执行路径);
一个进程中可以有多个执行路径,称之为多线程;
如何创建多线程?
1.继承Thread类---线程类
12步骤
34步骤
2、第二种创建线程的方式----实现Runnable接口;(使用的更加广泛)
步骤:
12步骤
34步骤
好处:
多线程---同步代码块;
synchronized---同步的
同步的好处和弊端是?
多线程-----死锁;
产生死锁的条件:
①一个资源只能被一个进程锁占用,直到被该进程锁释放;
②一个进程因请求被占用资源而发生阻塞时,对已获资源保持不放;
③任何一个资源在没被该进程释放之前,任何其他资源都无法对他占用;
避免死锁:
- 加锁顺序
- 加锁时限
- 死锁检测
多线程---等待唤醒机制;
涉及的方法有:
1.wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。
2.notify():唤醒线程池中一个线程(任意);
3.notifyAll():唤醒线程池中所有线程;
这些方法都必须定义到同步中,因为这些方法是用于操作线程状态的方法,必须要明确到底操作的是哪个锁上的线程。
为什么操作线程的方法wait,notify,notifyAll()定义在了object类中?
因为这些方法是监视器的方法,监视器其实就是锁,锁可以是任意的对象,任意的对象调用的方式一定定义在object类中;
生产者+消费者
多个生产者+多个消费者
notifyAll():解决唤醒对方的办法,
while判断标记,解决了线程获取执行权后,是否要运行,
wait()和slee()的区别?
1.wait可以指定时间也可以不指定时间;
sleep必须指定时间;
2.在同步中时,对cpu的执行权和锁的处理不同;
wait:释放执行权,释放锁;
sleep:释放执行权,不释放锁;
停止线程:
怎么控制线程的任务结束呢?
任务中都会有循环结构,只要控制住循环就可以结束任务,控制循环通常就用定义标记来完成;
如果线程处于冻结状态,无法读取标记,该如何结束线程呢?
可以使用interrupted()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu的执行资格;当时强制动作会发生了interruptedException,记得要处理
setDaemon():守护线程
join():临时加入一个线程,优先去执行;
11、数组+内存划分
1.寄存器
2.本地方法区
3.方法区
4.栈内存
存储的都是局部变量;而且变量所属的作用域一旦结束,该变量就自动释放;
5.堆内存
存储的是对象(凡是new建立的都在堆中)
12、内部类
细节:
内部类可以存放在局部位置;
内部类在局部位置上只能访问局部中被final修饰的局部变量;
什么时候使用内部类?
匿名内部类(内部类的简写格式)的书写前提?
内部类必须继承或者实现一个外部类或接口;
实质:就是一个匿名子类对象;
格式:new 父类or接口(){子类内容}
匿名内部类细节:
13、泛型
什么是泛型方法?
这样做的好处就是,传入的值是自定义类型的,不受约束;
什么是泛型接口?
什么是泛型通配符?
什么时候使用泛型的上限呢?
一般在存储元素的时候都是用上限;
什么时候使用泛型的下限呢?
通常对集合中的元素进行取出操作时。
13.object类
equals方法
hashcode方法
getclass方法
tostring方法
14.单例设计模式
解决的问题:就是可以保证一个类在内存中的对象唯一性;
如何进行单例模式设计?
例如:
15.工具类collection排序
16.异常
什么是异常捕捉?
异常捕捉的原则?
finally代码块的作用?
通常用于释放和关闭资源,它是一定会被执行的代码块;
关于异常的一些注意事项?
17.vector集合
Linkedlist集合
18.string类
细节,为何下图的s==s1为false?
string类有什么自带的功能?
string类中的转换操作是怎样的?
string类中判断功能?
string类中比较功能?
compare to() 方法,前者比后者小(其实是ASCII码的比较),返回一个小于0的值,反之,返回一个大于0的值,若两者相等,则返回值为0;
string类的intern方法?
对字符串池进行操作;
string类的排序?
字符串对象如何进行比较;
一个字串在整串中出现的次数;
两个字符串中最大相同的子串;
如何去除字符串两端空白?
19、IO流
什么是IO流?
IO流的基类?
FileWriter 创建一个文件,写入字符数据;
FileReader 读取一个文件中的字符数据;
文本复制的2种方式(连读带写);
图解文本复制:
什么是缓冲区?
BufferedReader
BufferedWriter:为了提高写入效率;
readline()方法的原理?
使用了读取缓冲区的read方法,将读取的字符进行缓冲并判断换行标记,将标记钱的缓存数据变成字符串返回
什么是装饰设计模式?
对一组对象的功能进行增强,就可以使用该模式进行问题的解决;
装饰设计模式相比继承的优点?
流体系进行功能扩展,有多了流对象,如果要提高流要提高效率,继承只会导致体系越来越臃肿,不灵活,所以选择
装饰设计模式;
字节流如何操作文件?
复制mp3文件;
键盘录入的读取;
什么是转换流?
InputStreamReader()-----字节流转换成字符流,编码
OutputStream()-----标准输出流
OutputStreamWriter()-----字符流转换成字节流,解码
流的操作规律?
什么是File类?
File类如何获取、创建和删除信息文件信息?
过滤器是什么?
过滤器工作原理图?
什么是递归?
函数自身调用自身;
如何删除目录?
原理:从最里面往外面删除;
什么是properties集合?
基本功能:
list()方法;
store()方法----持久化存储;
什么是打印流?
PrintWriter()----打印字节;
PrintStream()-----打印字符(操作文件);
1.提供了打印方法,可以对多种数据类型进行打印,并且保持数据的表示形式;
2.不抛出IOException
什么是序列流?
·SequenceInputStream()---对多个流进行 合并;
怎么实现文件切割器?
1.用读取流关联源文件
2.定义一个1M的缓冲区;
3.创建目的;
如何进行对象序列化?
ObjectInputStream与ObjectOutputStream
接口类需要继承serializable类,来标记接口,
serializable()的作用是什么?
用于给序列化的类加入ID号,用于判断类和对象是否是同一个版本;
transient关键字的作用?
非静态数据不想被序列化可以使用这个关键字修饰;
RandomAccessFile类的作用?
什么是管道流?
PipedStream类
什么是基本类型数据流?
DataStream类
什么是操作数组的流?
ByteArrayOutputStream类