1 java 中的对象
对象拷贝:对象赋值存在栈里就是对象拷贝,存在堆里就是引用赋值
Java 使用面向对象编程(Object-Oriented Programming,OOP),这是一种编程风格,它旨在使思考编程更接近思考现实世界。
在面向对象中,每个对象都是一个独立的单位,就像现实世界中的对象一样。
看看周围真实的世界,会发现身边有很多对象,车,猫,人等等。所有这些对象都有自己的状态和行为。
拿一只猫来举例,它的状态有:猫名、猫龄、颜色,行为有:睡觉、吃食和发出声音。
对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
1.1 Java 中创建对象的方式
2 Java 中的类
一个类描述对象将是什么,但是与对象本身是分开的。
换句话说,类可以描述为对象的模板,描述或定义。
您可以使用相同的类作为创建多个对象的模板。第一步是定义类,然后成为对象创建的模板。
每个类都有一个名称,每个类都用于定义属性和行为。
下面通过一个简单的类来理解Java中类的定义:
public class Cat{ String name; int age; String color; void sleeping(){ } void eating(){ } void barking(){ } }
3 Java创建对象有几种方式?
java中提供了以下四种创建对象的方式:
1. new创建新对象
2. 通过反射机制
3. 采用clone机制
4. 通过序列化机制
4 有没有可能两个不相等的对象有相同的hashcode
有可能.在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值.当hash冲突产生时,一般有以
下几种方式来处理:
1. 拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以
用这个单向链表进行存储.
2. 开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入
3. 再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.
5 拷贝和浅拷贝的区别是什么?
浅拷贝:
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.
深拷贝:
被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.
6 面向对象都有哪些特性以及你对这些特性的理解
6.1 封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
6.2 继承
好处:
1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了另一个特征,是多态的前提。
注意:
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第
一行都有默认的语句 super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过 super 语句指定要访
问的父类中的构造函数。
如果子类构造函数中用 this 来指定调用子类自己的构造函数,那么被调用的构造函数也一
样会访问父类中的构造函数。
6.3 多态
某一种事物有不同的具体的体现。
体现:父类引用或者接口的引用指向了自己的子类对象。
多态的好处:一般用于传递参数,传入父类,之后子类都可以传,提高了程序的扩展性。
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的
方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态的前提:
1:必须要有关系,比如继承、或者实现。
2:通常会有覆盖操作。