面向对象三大特征
封装
将一个对象的属性隐藏在对象内部,不允许外部对象直接访问该对象的内部信息,必须要通过一些方法来操作属性。
继承
使用已经存在的类的定义作为基础建立新的类,新的类可以增加新的数据和功能,也可以用父类的功能。
注意:
多态
特点:
a++与++a
基本类型和包装类型区别
- 包装类型可用于泛型,而基本类型不能
- 基本类型的局部变量存放在JVM的虚拟机栈中的局部变量表中,成员变量(未被static修饰)存放在堆中,包装类型的所有变量存放在堆中
- 基本数据类型所占空间比包装类型的小
==
,基本数据类型比较的是值,包装类型比较的是对象的地址,比较值用equals()
方法
重载与重写
接口与抽象类的异同
共同点
不同点
- 一个类只能继承一个类,但是可以实现多个接口
- 接口中的成员变量只能是
public static final
类型的,不能被修改且无初始值,抽象类的成员变量默认default,可以在子类中被重新定义,也可以被重新赋值
深拷贝、浅拷贝和引用拷贝
==
与equals()
hashCode( ) 与 equals( )
两者都是用于比较两个对象是否相等,但hashCode效率更高
- 两个对象的hashCode值相等,但两个对象不一定相等(hash碰撞)
- 两个对象的hashCode值相等并且equals()方法返回true,两个对象才相等
- 两个对象的hashCode值不相等,那两个对象一定不相等
Object中常见的方法
final ,finally,finalize三者区别
- final是一个关键字,用于修饰不可变的变量、方法和类
- finally也是一个关键字,用于定义必须执行的代码块,在和try–catch一起使用,无论是否捕获或处理异常,
finally
块里的语句都会被执行。当在try
块或catch
块中遇到return
语句时,finally
语句块将在方法返回之前被执行。注意:finally块中的return会覆盖try里面的return - finalize是Object的一个方法,用于完成对象在销毁前必须完成的操作,在垃圾回收前被调用。
String StringBuilder和StringBuffer
字符串拼接使用
+
,实际上是通过StringBuilder调用append()
方法实现的,拼接完成后调用toString()方法得到String对象
在循环中,+
拼接字符串会导致每次都创建StringBuilder对象,不过在JDK9中这个问题得到解决
序列化与反序列化
注意:
反射
获取Class对象的四种方式
-
知道具体类
Class alunbarClass = TargetObject.class;
-
知道类的全路径
Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject");
-
通过对象实例
TargetObject o = new TargetObject(); Class alunbarClass2 = o.getClass();
-
ClassLoader.getSystemClassLoader().loadClass("cn.javaguide.TargetObject");
通过反射操作类的方法和参数
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException {
/**
* 获取 TargetObject 类的 Class 对象并且创建 TargetObject 类实例
*/
Class<?> targetClass = Class.forName("cn.javaguide.TargetObject");
TargetObject targetObject = (TargetObject) targetClass.newInstance();
/**
* 获取 TargetObject 类中定义的所有方法
*/
Method[] methods = targetClass.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
/**
* 获取指定方法并调用
*/
Method publicMethod = targetClass.getDeclaredMethod("publicMethod",
String.class);
publicMethod.invoke(targetObject, "JavaGuide");
/**
* 获取指定参数并对参数进行修改
*/
Field field = targetClass.getDeclaredField("value");
//为了对类中的参数进行修改我们取消安全检查
field.setAccessible(true);
field.set(targetObject, "JavaGuide");
/**
* 调用 private 方法
*/
Method privateMethod = targetClass.getDeclaredMethod("privateMethod");
//为了调用private方法我们取消安全检查
privateMethod.setAccessible(true);
privateMethod.invoke(targetObject);
}
原文地址:https://blog.csdn.net/weixin_59864324/article/details/134699622
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13255.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。