JAVA基础--面试用

1、java中类名+方法名(){}

是普通方法的构造,是有返回值的,返回值是你的类名的对象.

 

(类方法==一般方法)

1.1 java中创建对象 类名 对象名=new 类名(); 后面的()什么意思

 
类名 对象名=new 类名();
类名 对象名 这个的解释是创建名称为“对象名”的“类名”类引用变量
new ; 这个的解释是实例化对象
类名() 这个的解释是无参数构造方法;
new 类名();就是说以无参数构造方法实例化对象;
类名 对象名=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. 加锁顺序
  2. 加锁时限
  3. 死锁检测

 多线程---等待唤醒机制;

涉及的方法有:

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类

原文地址:https://www.cnblogs.com/zhzJAVA11/p/10078830.html