Java复习笔记——基础知识之面试题

八种基本数据类型的大小,以及他们的封装类

八种基本数据类型:int、short、float、double、long、boolean、byte、char。

封装类分别是:Integer、Short、Float、Double、Long、Boolean、Byte、Character。

在这里插入图片描述

equals与==的区别

使用==比较原生类型如:boolean、int、char等等,使用equals()比较对象。

1、==是判断两个变量或实例是不是指向同一个内存空间。 equals是判断两个变量或实例所指向的内存空间的值是不是相同。

2、==是指对内存地址进行比较。 equals()是对字符串的内容进行比较。

3、==指引用是否相同。 equals()指的是值是否相同。

Object有哪些公用方法

Object是所有类的父类,任何类都默认继承Object

clone 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

equals 在Object中与==是一样的,子类一般需要重写该方法。

hashCode 该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

getClass final方法,获得运行时类型

wait 使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。 wait() 方法一直等待,直到获得锁或者被中断。 wait(long timeout) 设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生

1、其他线程调用了该对象的notify方法。 2、其他线程调用了该对象的notifyAll方法。 3、其他线程调用了interrupt中断该线程。 4、时间间隔到了。 5、此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

notify 唤醒在该对象上等待的某个线程。

notifyAll 唤醒在该对象上等待的所有线程。

toString 转换成字符串,一般子类都有重写,否则打印句柄。

Java(OOP)面向对象的三个特征与含义

封装(高内聚低耦合 -->解耦)

封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。

java的继承(重用父类的代码)

继承是子对象可以继承父对象的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。

java中的多态(父类引用指向子类对象)

多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。

有两种多态的机制:编译时多态、运行时多态。

1、方法的重载:重载是指同一类中有多个同名的方法,但这些方法有着不同的参数。,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。 2、方法的重写:子类可以覆盖父类的方法,因此同样的方法会在父类中与子类中有着不同的表现形式。
java反射的作用于原理

什么是Java的反射呢?

Java 反射是可以让我们在运行时,通过一个类的Class对象来获取它获取类的方法、属性、父类、接口等类的内部信息的机制。

这种动态获取信息以及动态调用对象的方法的功能称为JAVA的反射。

反射的作用?

反射就是:在任意一个方法里:

1.如果我知道一个类的名称/或者它的一个实例对象, 我就能把这个类的所有方法和变量的信息找出来(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)

2.如果我还明确知道这个类里某个变量的名称,我还能得到这个变量当前的值。

3.当然,如果我明确知道这个类里的某个方法名+参数个数类型,我还能通过传递参数来运行那个类里的那个方法。

反射机制主要提供了以下功能:

在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法。
生成动态代理。
反射的原理?

JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类、类中的方法以及属性等。

反射的实现API有哪些?

反射的实现主要借助以下四个类:

Class:类的对象
Constructor:类的构造方法
Field:类中的属性对象
Method:类中的方法对象
反射的实例

泛型常用特点

List能否转为List
不可以强转类型的

这个问题涉及到了,范型向上转型 和 范型向下转型问题。 List向上转换至List(等价于List)会丢失String类的身份(String类型的特有接口)。 当需要由List向下转型时,你的程序必须明确的知道将对象转换成何种具体类型,不然这将是不安全的操作。

如果要强转类型,Json 序列化转型

List str = new ArrayList();
List obj= JSONObject.parseArray(JSONObject.toJSONString(str));
或者遍历,或者克隆,但是取出来就是(Object)了,需要强转,String 因为类型丢了。

引用
面试题
https://www.cnblogs.com/java1024/p/8622195.html
多态
https://www.cnblogs.com/startRuning/p/5673485.html
https://blog.csdn.net/xuefeng_yang/article/details/49497415
反射
http://www.cnblogs.com/zhaoyanjun/p/6074887.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值