1.面向对象、面向过程
- 面向对象
复用、维护、拓展|| 类实例化开销大
- 面向过程
性能->单片机、嵌入式 性能优先考虑
2.java特点
- 相较于C C++简单易学
- OOP
- security
- 多线程
- 平台无关
3.
jdk->java开发工具箱
jre->java运行环境 注:一般人只需要下jre->来运行Java程序,而开发人员需要jdk编译调试程序
jvm->java虚拟机 独立于OS实现一次编写到处运行-->字节码转机器代码 垃圾回收 内存管理等
4.构造器不能重写 只能重载
5.重写和重载
重载->方法名相同,参数列表不同(类型、个数、顺序、返回值、访问修饰符)
重写->方法名、参数列表相同(访问修饰符大于父类、private修饰的方法不能重写)
6.封装、继承、多态
1.封装->属性私有化,对外提供访问属性的方法
2.继承->用以存在的类作为基础建立新的类的过程 extends
3.多态->一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,
必须在由程序运行期间才能决定。
-
多态存在的三个必要条件
1、要有继承;
2、要有重写;
3、父类引用指向子类对象。 - 多态好处:可扩充性、灵活性、接口性、简化性
7.用组合不用继承的理由
继承:is-a 例如:水果是苹果香蕉的一般化
组合:has-a
比如你继承一个父类,包含好多属性和方法你根本不回去用它,这就会使子类无限膨胀,并且同事在调用某些方法时
会出现各种错误。而组合却可以比继承灵活得多,可以在运行期才决定某个对象,不会产生歧义和调用错误等状况。
8.string stringbuild stringbuffer
1.String不可变private final char value[],所以String对象是不可变的
2.Stringbuffer加了同步锁线程安全,stringbuild不安全
3.少量数据string 单线程大量数据stringbuild 多线程大量数据stringbuffer
9.自动装箱、拆箱
1.将基本类型用它们对应的引用类型包装起来(包装类:Double Integer Bool...);
2.包装类转基本类型
10.在一个静态方法内调用一个非静态成员为什么是非法的
静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
11.默认构造函数的作用
创建一个"子类"的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如(父类有带参数的构造
函数),那么系统将(不会给它创建无参数的构造函数),这时,子类在实例化的时候,因为"找不到父类的默认构造函数",编译器将会报错,但如果在子类的构造函数
中'指定用父类的带参数的构造函数'的时候,或者在父类中加一个无参数的构造函数,就不会报错。
解决方案 1. super(args...) 2.Constructor(){}
12.接口和抽象类的区别是什么
1.interface所有方法在接口中不能有实现,抽象类可以有非抽象的方法
2.一个类可以实现多个接口,但最多只能实现一个抽象类
3.一个类实现接口的话要实现接口的"所有方法",而抽象类不一定
4.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象
是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
抽象类:使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
13.创建对象的几种方式
1.new,实例化后定死了。
2.反射:Class类和Constructor类
Class: Object ob = Object.class.newInstance()
Constructor: Constructor<T> construct = T.class.getConstructor();
T t = constructor.newInstance();
3.clone:
A a = new A(); A aa = (A)a.clone();
4.反序列化...
纯个人总结,接受指正,欢迎探讨,转载请说明出处,谢谢🙃
未完待续...
网友评论