wordpress xampp建站开发移动网站
- 作者: 多梦笔记
- 时间: 2026年02月18日 11:26
当前位置: 首页 > news >正文
wordpress xampp建站,开发移动网站,化妆品网站优势,wordpress 腾讯云短信一、面向对象基础
- 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象#xff0c;然后用对象执行方法的方式解决问题。 2.创建一个对象用什么运算符?对象实体与对象引用有何不同? n…一、面向对象基础
- 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法通过一个个方法的执行解决问题。面向对象会先抽象出对象然后用对象执行方法的方式解决问题。 2.创建一个对象用什么运算符?对象实体与对象引用有何不同? new 运算符new 创建对象实例对象实例在堆内存中对象引用指向对象实例对象引用存放在栈内存中。 一个对象引用可以指向 0 个或 1 个对象一个对象可以有 n 个引用指向它 3.对象的相等和引用相等的区别 对象的相等一般比较的是内存中存放的内容是否相等。引用相等一般比较的是他们指向的内存地址是否相等。 4.如果一个类没有声明构造方法该程序能正确执行吗? 构造方法是一种特殊的方法主要作用是完成对象的初始化工作。如果一个类没有声明构造方法也可以执行因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。如果我们自己添加了类的构造方法无论是否有参Java 就不会添加默认的无参数的构造方法了 5.构造方法有哪些特点是否可被 override? 构造方法特点如下 名字与类名相同。没有返回值但不能用 void 声明构造函数。生成类的对象时自动执行无需调用。 构造方法不能被 override重写,但是可以 overload重载 6.面向对象三大特征 6.1封装 封装是指把一个对象的状态信息也就是属性隐藏在对象内部不允许外部对象直接访问对象的内部信息。 public class Student {private int id;//id属性私有化private String name;//name属性私有化//获取id的方法public int getId() {return id;}//设置id的方法public void setId(int id) {this.id id;}//获取name的方法public String getName() {return name;}//设置name的方法public void setName(String name) {this.name name;} } 6.2继承 不同类型的对象相互之间经常有一定数量的共同点 通过使用继承可以快速地创建新的类可以提高代码的重用程序的可维护性节省大量创建新类的时间 提高我们的开发效率。 关于继承如下 3 点请记住 子类拥有父类对象所有的属性和方法包括私有属性和私有方法但是父类中的私有属性和方法子类是无法访问只是拥有。子类可以拥有自己属性和方法即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。 6.3多态 表示一个对象具有多种的状态具体表现为父类的引用指向子类的实例 多态的特点: 对象类型和引用类型之间具有继承类/实现接口的关系引用类型变量发出的方法调用的到底是哪个类中的方法必须在程序运行期间才能确定多态不能调用“只在子类存在但在父类不存在”的方法如果子类重写了父类的方法真正执行的是子类覆盖的方法如果子类没有覆盖父类的方法执行的是父类的方法 7.接口和抽象类有什么共同点和区别 共同点 都不能被实例化。都可以包含抽象方法。都可以有默认实现的方法Java 8 可以用 default 关键字在接口中定义默认方法。 区别 接口主要用于对类的行为进行约束你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用强调的是所属关系。一个类只能继承一个类但是可以实现多个接口。接口中的成员变量只能是 public static final 类型的不能被修改且必须有初始值而抽象类的成员变量默认 default可在子类中被重新定义也可被重新赋值 8.深拷贝和浅拷贝区别了解吗什么是引用拷贝 浅拷贝浅拷贝会在堆上创建一个新的对象区别于引用拷贝的一点不过如果原对象内部的属性是引用类型的话浅拷贝会直接复制内部对象的引用地址也就是说拷贝对象和原对象共用同一个内部对象。 深拷贝深拷贝会完全复制整个对象包括这个对象所包含的内部对象。 public class Address implements Cloneable{private String name;// 省略构造函数、GetterSetter方法Overridepublic Address clone() {try {return (Address) super.clone();} catch (CloneNotSupportedException e) {throw new AssertionError();}} }public class Person implements Cloneable {private Address address;// 省略构造函数、GetterSetter方法Overridepublic Person clone() {//浅拷贝try {Person person (Person) super.clone();return person;} catch (CloneNotSupportedException e) {throw new AssertionError();}}Overridepublic Person clone() {try {//深拷贝Person person (Person) super.clone();person.setAddress(person.getAddress().clone());return person;} catch (CloneNotSupportedException e) {throw new AssertionError();} }二、Object 1.Object 类的常见方法有哪些 /*** native 方法用于返回当前运行时对象的 Class 对象使用了 final 关键字修饰故不允许子类重写。/ public final native Class? getClass() /** native 方法用于返回对象的哈希码主要使用在哈希表中比如 JDK 中的HashMap。/ public native int hashCode() /** 用于比较 2 个对象的内存地址是否相等String 类对该方法进行了重写以用于比较字符串的值是否相等。/ public boolean equals(Object obj) /** native 方法用于创建并返回当前对象的一份拷贝。/ protected native Object clone() throws CloneNotSupportedException /** 返回类的名字实例的哈希码的 16 进制的字符串。建议 Object 所有的子类都重写这个方法。/ public String toString() /** native 方法并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。/ public final native void notify() /** native 方法并且不能重写。跟 notify 一样唯一的区别就是会唤醒在此对象监视器上等待的所有线程而不是一个线程。/ public final native void notifyAll() /** native方法并且不能重写。暂停线程的执行。注意sleep 方法没有释放锁而 wait 方法释放了锁 timeout 是等待时间。/ public final native void wait(long timeout) throws InterruptedException /** 多了 nanos 参数这个参数表示额外时间以纳秒为单位范围是 0-999999。 所以超时的时间还需要加上 nanos 纳秒。。/ public final void wait(long timeout, int nanos) throws InterruptedException /** 跟之前的2个wait方法一样只不过该方法一直等待没有超时时间这个概念/ public final void wait() throws InterruptedException /** 实例被垃圾回收器回收的时候触发的操作*/ protected void finalize() throws Throwable { }
- 和 equals() 的区别 对于基本类型和引用类型的作用效果是不同的
对于基本数据类型来说 比较的是值。对于引用数据类型来说 比较的是对象的内存地址。
equals() 不能用于判断基本数据类型的变量只能用来判断两个对象是否相等。equals()方法存在于Object类中而Object类是所有类的直接或间接父类因此所有的类都有equals()方法。
//object
public boolean equals(Object obj) {return (this obj);
}
//String中重写Object方法
public boolean equals(Object anObject) {if (this anObject) {return true;}if (anObject instanceof String) {String anotherString (String)anObject;int n value.length;if (n anotherString.value.length) {char v1[] value;char v2[] anotherString.value;int i 0;while (n– ! 0) {if (v1[i] ! v2[i])return false;i;}return true;}}return false;
}3. hashCode() 有什么用
hashCode() 的作用是获取哈希码int 整数也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。
hashCode() 定义在 JDK 的 Object 类中这就意味着 Java 中的任何类都包含有 hashCode() 函数。另外需要注意的是Object 的 hashCode() 方法是本地方法也就是用 C 语言或 C 实现的。
public native int hashCode();4.为什么重写 equals() 时必须重写 hashCode() 方法
equals 方法判断两个对象是相等的那这两个对象的 hashCode 值也要相等。两个对象有相同的 hashCode 值他们也不一定是相等的哈希碰撞。
总结
如果两个对象的hashCode 值相等那这两个对象不一定相等哈希碰撞。
如果两个对象的hashCode 值相等并且equals()方法也返回 true我们才认为这两个对象相等。
如果两个对象的hashCode 值不相等我们就可以直接认为这两个对象不相等。 三、String
1.String、StringBuffer、StringBuilder 的区别
可变性
String 是不可变的后面会详细分析原因。
StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类在 AbstractStringBuilder 中也是使用字符数组保存字符串不过没有使用 final 和 private 关键字修饰最关键的是这个 AbstractStringBuilder 类还提供了很多修改字符串的方法比如 append 方法。
abstract class AbstractStringBuilder implements Appendable, CharSequence {char[] value;public AbstractStringBuilder append(String str) {if (str null)return appendNull();int len str.length();ensureCapacityInternal(count len);str.getChars(0, len, value, count);count len;return this;}//…
}线程安全性
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁所以是线程安全的。
StringBuilder 并没有对方法进行加同步锁所以是非线程安全的。
性能
相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升但却要冒多线程不安全的风险。
对于三者使用的总结
操作少量的数据: 适用 String单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
2.String 为什么是不可变的?
String 类中使用 final 关键字修饰字符数组来保存字符串
public final class String implements java.io.Serializable, ComparableString, CharSequence {private final char value[];//…
}
//在 Java 9 之后String、StringBuilder 与 StringBuffer 的实现改用 byte 数组存储字符串。
public final class String implements java.io.Serializable,ComparableString, CharSequence {// Stable 注解表示变量最多被修改一次称为“稳定的”。Stableprivate final byte[] value;
}abstract class AbstractStringBuilder implements Appendable, CharSequence {byte[] value;
}
String 真正不可变有下面几点原因
保存字符串的数组被 final 修饰且为私有的并且String 类没有提供/暴露修改这个字符串的方法。String 类被 final 修饰导致其不能被继承进而避免了子类破坏 String 不可变。
3.字符串拼接用“” 还是 StringBuilder?
字符串对象通过“”的字符串拼接方式实际上是通过 StringBuilder 调用 append() 方法实现的拼接完成之后调用 toString() 得到一个 String 对象
4.String.equals() 和 Object.equals() 有何区别
String 中的 equals 方法是被重写过的比较的是 String 字符串的值是否相等。Object 的 equals 方法是比较的对象的内存地址
5.字符串常量池的作用了解吗
字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串String 类专门开辟的一块区域主要目的是为了避免字符串的重复创建。
6.String s1 new String(“abc”);这句话创建了几个字符串对象
会创建 1 或 2 个字符串对象。
1、如果字符串常量池中不存在字符串对象“abc”的引用那么它会在堆上创建两个字符串对象其中一个字符串对象的引用会被保存在字符串常量池中。
7.String#intern 方法有什么作用?
String.intern() 是一个 native本地方法其作用是将指定的字符串对象的引用保存在字符串常量池中可以简单分为两种情况
如果字符串常量池中保存了对应的字符串对象的引用就直接返回该引用。如果字符串常量池中没有保存了对应的字符串对象的引用那就在常量池中创建一个指向该字符串对象的引用并返回。
// 在堆中创建字符串对象”Java“
// 将字符串对象”Java“的引用保存在字符串常量池中
String s1 Java;
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s2 s1.intern();
// 会在堆中在单独创建一个字符串对象
String s3 new String(Java);
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s4 s3.intern();
// s1 和 s2 指向的是堆中的同一个对象
System.out.println(s1 s2); // true
// s3 和 s4 指向的是堆中不同的对象
System.out.println(s3 s4); // false
// s1 和 s4 指向的是堆中的同一个对象
System.out.println(s1 s4); //true8.String 类型的变量和常量做“”运算时发生了什么
并不是所有的常量都会进行折叠只有编译器在程序编译期就可以确定值的常量才可以
基本数据类型( byte、boolean、short、char、int、float、long、double)以及字符串常量。final 修饰的基本数据类型和字符串变量字符串通过 “”拼接得到的字符串、基本数据类型之间算数运算加减乘除、基本数据类型的位运算、、
引用的值在程序编译期是无法确定的编译器无法对其进行优化。 String str1 str; String str2 ing; String str3 str ing; String str4 str1 str2; String str5 string; System.out.println(str3 str4);//false System.out.println(str3 str5);//true System.out.println(str4 str5);//false//对象引用和“”的字符串拼接方式实际上是通过 StringBuilder 调用 append() 方法实现的拼接完成之后调用 toString() 得到一个 String 对象 String str4 new StringBuilder().append(str1).append(str2).toString();//字符串使用 final 关键字声明之后可以让编译器当做常量来处理。 final String str1 str; final String str2 ing; // 下面两个表达式其实是等价的 String c str ing;// 常量池中的对象 String d str1 str2; // 常量池中的对象 System.out.println(c d);// true//编译器在运行时才能知道其确切值的话就无法对其优化。 final String str1 str; final String str2 getStr(); String c str ing;// 常量池中的对象 String d str1 str2; // 在堆上创建的新的对象 System.out.println(c d);// false public static String getStr() {return ing; }
相关文章
-
wordpress vps建站智联招聘网站怎么做两份简历模板
wordpress vps建站智联招聘网站怎么做两份简历模板
- 站长
- 2026年02月18日
-
wordpress video佛山手机网站建设优化
wordpress video佛山手机网站建设优化
- 站长
- 2026年02月18日
-
wordpress termseo排名教程
wordpress termseo排名教程
- 站长
- 2026年02月18日
-
wordpress 阿里云主机seo网站设计
wordpress 阿里云主机seo网站设计
- 站长
- 2026年02月18日
-
wordpress 标签 图片不显示宁波seo排名方案
wordpress 标签 图片不显示宁波seo排名方案
- 站长
- 2026年02月18日
-
wordpress 不收录重庆高端seo
wordpress 不收录重庆高端seo
- 站长
- 2026年02月18日
