- +=隐含了强制类型转换。
x+=y;等价与:x = (x的数据类型)(x + y); - 函数重载?
函数名相同,参数列表不同,跟返回值不关,就是函数重载 - 封装是什么?
隐藏对象的属性和具体的实现细节,仅对外提供公共的访问方式.
类、方法其实也是封装的体现。 继承是什么?
概念:把多个类中相同的内容抽取出来,单独定义到一个类(父类)中,再定义其他类(子类)的时候,继承父类即可.
好处:1.提高了代码的复用性,降低了代码的重复率.2.提高了代码的维护性3.让类与类之间产生了关系,是多态的前提.
继承的特点是:Java中类只能够单继承,但是可以多层继承
注意:
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。
如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。匿名对象是什么?应用场景是什么?
应用场景:A:调用方法。但是仅仅只限调用一次而已。B:匿名对象用作实际参数传递。- 方法重写和方法重载的区别?重载可以改变返回值类型吗?(*面试题)
方法重写:子类中出现和父类中一模一样的方法声明的方法。
方法重载:同一个类中,出现方法名相同,参数列表不同的方法。
跟返回值无关。
重载可以改变返回值类型,因为他跟返回值无关。 - static关键字是什么?有什么特点?什么时候用呢?
static关键字:是静态的意思,可以修饰类中成员变量和成员方法。
静态的特点:随着类的加载而加载、优先与对象而存在、被所有对象所共享、可以通过类名.静态的内容调用。 - A:局部代码快: 就是在方法中用{}括起来的代码。作用是限定变量的生命周期,提高效率。
B:构造代码快:在类中,方法外。用{}括起来的代码。作用是把所有构造方法中相同的内容抽取出来,
定义到构造代码块中,将来在调用构造方法的时候,会去自动调用构造代码块。构造代码快优先于构造方法。
C:静态代码快:在类中、方法外。用{}括起来的代码。只不过加了static修饰。
作用是:随着类的加载而加载,而且只加载一次的代码。 - 一个类的实例化过程有哪些步骤?(*面试题)
Student s = new Student(); 在内存中到底执行了哪些步骤。
1,加载Sutdent.class文件进内存(类加载器)
2,在栈内存为 s 变量申请一个空间
3,在堆内存为Student对象申请空间
4,对类中的成员变量进行默认初始化
5,对类中的成员变量进行显示初始化
6,有构造代码块就先执行构造代码块,如果没有,则省略
7,执行构造方法,通过构造方法对对对象数据进行初始化
8,堆内存中的数据初始化完毕,把内存值复制给 s 变量 - 子父类中构造方法的执行有什么特点?为什么要这样?
子类构造方法的执行,首先会去执行父类的构造方法。
因为子类中可能直接访问了父类的数据,父类的数据要优先于子类的数据进行初始化。 - final关键字是什么,可以修饰什么,有什么特点?
final关键字:是最终意思,可以修饰类、方法、变量。
修饰类:类不可以被继承。
修饰方法:方法不可被重写
修饰变量:变量为常量。 - 多态是什么,前提是什么?
多态:对象在不同时刻表现出来的多种状态。是一种编译时期状态和运行时期状态不一致的现象。
成员变量:编译看左边,运行看左边。
成员方法:编译看左边,运行看右边。普通成员方法可以重写,变量不可以。
静态方法:编译看左边,运行看左边。 什么是抽象类?抽象类的特点和好处是什么?
相同的方法,有相同方法的声明,但是方法体不一样,只抽取方法声明的方法,叫做抽象方法,有抽象方法的类,叫做抽象类。
特点:
A:类或者方法必须用abstract修饰。
B:具体类在继承抽象类的时候,要么本身也是抽象类,要么实现抽象类中的所有抽象方法。
C:抽象类不能被实例化。要想使用,必须按照多态的方式使用。
D:成员特点:
a:成员变量
可以是变量,也可以是常量。
b:构造方法
有构造方法,但是不能实例化。
用于子类访问父类数据的初始化。
c:成员方法
抽象方法只定义方法声明,并不定义方法实现。
好处:
A:限定子类必须实现某些功能。
B:提高代码的复用性。抽象类的几个问题:
A:抽象类不能实例化,构造方法有什么用。
用于子类访问父类数据的初始化。
B:抽象类没有抽象方法,有什么意义?
限制创建对象。
C:abstract不能和哪些关键字共存?
final: 冲突
private: 冲突
static: 无意义- 什么是接口? 接口的特点?
如果一个抽象类中的方法全部是抽象方法,那么java就针对这种类型的抽象类,给出了一个更抽象的表达式:接口。
特点:
A:所有的方法,都是抽象方法。
B:类实现接口
要么本身是抽象类,要么重写接口中的抽象方法。
C:接口不能被实例化,要想使用,用多态。
D:成员特点
a:成员变量
只有常量,并且是静态常量。默认修饰符:public static final
b:构造方法
没有构造方法,子类数据的初始化默认走的是Ojbect类的构造方法
c:成员方法
全部是抽象的,有默认修饰符:public abstract - 抽象类和接口的区别? (*面试题)
A:成员区别
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有。
成员方法:有,可以是抽象的,也可以是非抽象的。
接口:
成员变量:只能是常量。默认修饰符:publci static final
构造方法:没有,子类数据的初始化默认走的是Ojbect类的构造方法。
成员方法:只能是抽象的,默认修饰符是:public abstract
B:类与接口的关系区别
类与类:
继承关系,单继承。
类与接口:
实现关系,单实现、多实现。
接口与接口:
继承关系,单继承、多继承。
C:设计理念的区别
抽象类被继承体现的是:is a的关系。抽象类中一般定义的是整个继承结构的共性功能。
接口被实现体现的是:like a的关系。接口中一般定义的是整个继承结构的扩展功能。 - 内部类的访问特点:
A:内部类可以直接访问外部类的成员,包括私有。
B:外部类要访问内部类的成员,必须创建对象。 - 为什么内部类访问局部变量必须加final修饰?(*面试题)
A: 防止在使用后数据发生改变。
B: 延长变量的生命周期。 - 什么是匿名内部类?本质是什么?
匿名内部类就是没有名字的内部类。
格式:
new 类名或者接口名() {
重写方法;
};
本质:是继承类或者实现接口的子类匿名对象。 - ==和equals()的区别? (*面试题)
A:==
a:基本类型 比较的是基本类型的值
b:引用类型 比较的是引用类型的地址值
B:equals()
只能比较引用类型。
默认比较地址值。 - String、StringBuffer、StringBuilder的区别?(*面试题)
String:字符长度是固定的。
StringBuffer/StringBuilder:字符长度是可变的。
StringBuffer:安全的,但效率较低一些。
StringBuilder:不安全的,但效率较高一些。
StringBuffer和StringBuilder兼容 - 什么是基本数据包装类?
对应的类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean - 集合和数组有什么区别?(*面试题)
集合:
长度可以发生改变。
只能存储对象类型,引用类型。
可以存储任意类型的对象。
数组:
长度固定。
可以存储基本类型,也可以存储引用数据类型。
只能存储同一种类型的元素。 - 泛型是什么?有什么用?在哪里用?泛型有什么好处和弊端?
泛型是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的数据类型。
能优化程序设计,解决了黄色警告线问题。
把运行时期的异常提前到了编译时间。
避免了强制类型转换。
弊端:让类型统一了,不能存储不同的数据类型了。 - HashSet如何保证元素唯一性的呢?
底层数据结构是哈希表(散列表)。具体的是由一个元素是单向链表的数组组成。
它依赖于两个方法:hashCode()和equals()方法。
执行顺序:
先判断hashCode()是否相同,
如果相同
继承执行equals()方法,看其返回值:
true:元素重复,不存储。
false:元素不重复,存储。
如果不同
存储。
记住:
看到HashXxx结构的集合,就要知道,被该集合存储的元素要重写hashCode()和equals()方法。
而且,是自动生成的。 - TreeSet底层数据结构是什么?如何保证元素的唯一性的呢?
底层数据结构是二叉树。
根据比较的返回值是否是0来决定。
如何保证元素的排序的呢?
A:自然排序 元素具备比较性
让集合中被存储的元素所属的类实现Comparable接口。
B:比较器排序 集合具备比较性
在创建集合对象的时候,让构造方法接收一个Comparator接口的子类对象。
自然排序和比较器排序的区别:
TreeSet构造函数什么都不传, 默认按照Comparable(接口,compareTo(T))的顺序(没有实现Comparable就报错ClassCastException)
TreeSet如果传入Comparator(接口compare(T1,T2)), 就优先按照Comparator - LinkedHashSet底层数据结构是什么?如何保证元素的唯一性的呢?
底层由链表和哈希表组成。
由链表保证有序。
由哈希表保证唯一。 - 什么是可变参数?
针对在写一个方法的时候,不知道具体要有多少个形式参数的时候。
java提供了可变参数的用法。
注意:
A:变量其实是该数据类型的一个数组。
B:形式参数如果有多个的话,可变参数只能是最后一个。
C:数据类型要一致。 - Hashtable和HashMap的区别?(面试题)
A:HashMap 线程不安全,效率高。允许null键和null值。
B:Hashtable 线程安全,效率低。不允许null键和null值。 - throws和throw的区别? (*面试题)
throws
位置:在方法()后面,跟的是类名,后面可以跟多个异常类名,并且用逗号隔开
表示抛出异常,交给调用者去处理
如果后面根据的是RuntimeException及其子类,那么,该方法可以不用处理。
如果后面根据的是Exception及其子类,那么,必须要编写代码进行处理,或者调用的时候抛出。
throw
位置:在方法中,跟的对象名称。后面只能跟一个异常对象
表示抛出异常,由方法体内语句处理
如果方法中,有throw抛出RuntimeException及其子类,那么,声明上可以没有throws。
如果方法中,有throw抛出Exception及其子类,那么,声明上必须有throws。 - final、finally、finalize的区别?(*面试题)
final:是最终的意思,用于修饰类、变量、和方法。修饰类的时候,类是最终类,不可以被继承。
修饰变量的时候,变量为常量,不可以被改变。修饰方法的时候,方法不能被重写。
finally:是异常处理的一部分,它里面的代码永远会执行(前提:jvm没退出),一般用于释放资源。
finalize:是object类的一个方法,用于垃圾处理。 - 什么是递归?使用递归需要注意哪些?
递归就是方法定义中调用方法本身的现象。
A:递归一定要有出口,否则就是死递归。
B:递归的次数不能太多,否则内存溢出。
C:构造方法不能递归使用。 - 基本的IO流有哪些?(*面试题)
字节流:InputStream、OutputStream、FileInputStream、FileOutputStream、
字符流:Writer、Reader、FileWriter、FileReader、
高效字节流:BufferedInputStream、BufferedOutputStream
高效字符流:BufferedWriter、BufferedReader
最开始的时候,只有字节流,但是后来由于中文字符或者其他字符的出现,用两个字节才能表示。
如果用字节流也是可以读写字符文件的数据的,但是比较麻烦。为了简化这种操作,就提供了字符流。 - flush()和close()的区别?(*面试题)
flush():刷新缓冲区,流对象还可以继续使用。
close():释放流资源,但是会先刷新一次缓冲区,操作完毕后,流对象不可以再使用。 - 多线程有几种实现方案?分别是什么?如何操作?(*面试题)
多线程有两种实现,分别是:
1,继承Thread类
自定义类继承Thread类,在类中重写run()方法,测试类中创建自定义类对象,并调用start()方法
2,实现Runnable接口
自定义类实现Runnable接口,重写run()方法,测试类中创建自定义对象,
创建Thread对象,把自定义对象作为构造参数传递。调用Thread类的start()方法。 - 线程的生命周期? (*面试题)
新建: 创建线程对象
就绪: 具备cup执行资格,没有执行权,随时准备执行
运行: 具备执行资格,执行权,执行run()中的代码
堵塞: 是当线程运行到符合某个我们定义的条件时,它会停止下来等待唤醒
死亡: run()结束了 - 多线程为什么会出现安全问题?怎么解决呢?(*面试题)
如果满足以下条件,那么就会出现安全问题:
A:是多线程程序。
B:有共享的数据。
C:针对共享数据有多条语句操作。
只要我们把多线程环境中,把操作共享数据的操作,变成单线程就没有问题了。
Java针对这种情况,就提供了同步技术:
A:同步代码块
B:同步方法
C:JDK5以后的Lock锁 - 同步的锁对象分别是?(*面试题)
代码块:任意对象
方法:this
静态方法:类名.class - sleep()和wait()的区别?(*面试题)
sleep():必须指定时间,不释放锁对象。
wait():可以指定时间,也可以不指定。释放锁对象。 - 网络通信三要素是什么? (*面试题)
A:IP地址
计算机在网络中的唯一标识。
现在使用的是:”点分十进制”
B:端口
应用程序的的标记。
C:协议
通信的规则。 - 反射是什么?反射获取字节码文件的三种方式?反射的好处?(*面试题)
在运行状态下,通过class文件对象(Class的对象),去使用构造方法,成员变量,成员方法。就是反射。
3种方法:
A.用Object类的getClass方法得到。
B.用任意数据类型的静态class属性可以得到
C.用Class类的静态方法forName(String className)方法得到
好处:只要有一个类或者一个类的对象,就可以得到这个类或对象的所有属性和方法。包括私有的。
java基础知识总结(二)
最新推荐文章于 2021-02-26 02:53:46 发布