引言
java语言是Sun公司在1990年由James Gosling创建的(Sun公司现已被Oracle甲骨文公司收购),在1995年才公布,java创始人James Gosling通过C++创造了java,所以java拥有了C++语言的优点,并去掉了C++中难以操作的指针、多继承等概念;相对于C++来说,java是一门纯粹的面向对象语言,大大简化了编程开发的难度,所以java在当下应用十分的广泛;Java现在使用广泛 薪资可观 没有经验想要学习的小伙伴要抓紧了!给你们推荐一下:B站 Java300集
里面全是java基础教学 名师讲解 还有实战经验想要学习的同学抓紧时间看看吧!而且都是免费的冲冲冲!!!
Java程序员八股文是指程序员在面试过程中经常被问到的问题,大多都有固定化、格式化的答案,俗称为面经。下面是整理的基础如图(1-1)上的问题下面会详细解答:
图1-1
1.Object类相关方法
getClass
获取当前运行时对象的Class对象。
hashCode
返回对象的hash码。
clone
拷贝当前对象,必须实现Cloneable接口。浅拷贝对基本类型进行值拷贝,对引用类型拷贝引用;深拷贝对基本类型进行值拷贝,对引用类型对象不但拷贝对象的引用还拷贝对象的相关属性和方法。两者不同在于深拷贝创建了一个新的对象。
equals
通过内存地址比较两个对象是否相等,String 类重写了这个方法使用值来比较是否相等。
toString
返回类名@哈希码的16进制。
notify
唤醒当前对象监视器的任一个线程。
notifyAll
唤醒当前对象监视器上的所有线程。
wait
1、暂停线程的执行; 2、三个不同参数方法(等待多少亳秒;额外等待多少毫秒;一直等待) 3、与Thread.sleep(long time)相比sleep使当前线程休眠一段时间, 并没有释放该对象的锁,wait 释放了锁。
finalize
对象被垃圾回收器回收时执行的方法。
2.基本数据类型
整型: byte(8)、short(16)、 int(32)、 long(64)
浮点型: float(32)、 double(64)
布尔型: boolean(8)
字符型: char(16)
3.序列化
Java对象实现序列化要实现Serializable接口。
反序列化并不会调用构造方法。反序列的对象是由JVM自己生成的对象,不通过构造方法生成。
序列化对象的引用类型成员变量,也必须是可序列化的,否则,会报错。
如果想让某个变量不被序列化,使用transient修饰。
单例类序列化,需要重写readResolve()方法。
4、String、StringBuffer、 StringBuilder
String由char[]数组构成,使用了final 修饰,是不可变对象,可以理解为常量,线程安全;对String进行改变时每次都会新生成一个String对象,然后把指针指向新的引用对象。
StringBuffer 线程安全; StringBuiler 线程不安全。
操作少量字符数据用String;单线程操作大量数据用StringBuilder;多线程操作大量数据用StringBuffer。
5、重载与重写
重载
发生在同一-个类中,方法名相同,参数的类型、个数、顺序不同,方法的返回值和修饰符可以不同。
重写
发生在父子类中,方法名和参数相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private或者final则子类就不能重写该方法。
6、final
修饰基本类型变量,一经出 初始化后就不能够对其进行修改。
修饰引用类型变量,不能够指向另-一个引用。
修饰类或方法,不能被继承或重写。
7、反射
在运行时动态的获取类的完整信息
增加程序的灵活性
JDK动态代理使用了反射
8、JDK动态代理
使用步骤创建接口及实现类
实现代理处理器:实现InvokationHandler ,实现invoke ( Proxy proxy, Method method, Object[] args)方法
通过Proxy.newProxyInstance(ClassLoaderloader, Class] interfaces, InvocationHandler h)获得代理类
通过代理类调用方法。
9、Java 10
普通IO,面向流,同步阻塞线程。
NIO,面向缓冲区,同步非阻塞。
总结
以上知识就是Java八股文一部分的基本知识了有喜欢的小伙伴可以去b站搜索Java300集里面有更详细的教程看的就是赚到,只有努力才能比别人更高一层,你我山巅自相逢。加油啊!