53、StringString StringBuffer和StringBuilder 的区别是什么/h3>
String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象
每次+操作 :
StringBuffer与StringBuilder都继承了AbstractStringBulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer是的,Stringbuilder是的。所以Stringbuilder比stringbuffer效率更高,StringBuffffer的方法大多都加了synchronized关键字
54、String str=”aaa”,与String str=new String(“aaa”)一样吗/h3>
为什么会输出上边的结果呢,String x = “张三” 的方式,Java 虚拟机会将其分配到中,,比如当执行“张三”时,java虚拟机会先在常量池中检索是否已经有“张三”,如果有那么就将“张三”的地址赋给变量,如果没有就创建一个,然后在赋给变量;,即使内容一样还是会创建新的对象。
上面程序中的,也就是判断是否为同一个对象,s1与s2 返回为true,s1与s3返回则是false。说明s1与s2 引用的同一个对象的地址,s3则与其它两个引用不是同一个对象地址。
。工作原理是这样的,创建一个字符串时,。所以上面s1与s2引用地址相同。
那为什么s3与s1、s2引用的不是同一个字符串地址呢String s3=new String(“Hello”); JVM首先是在字符串常量池中找”Hello” 字符串,如果没有创建字符串常量,然后放到常量池中,若已存在,则不需要创建;当遇到 new 时,还会在内存(不是字符串常量池中,而是在堆里面)上创建一个新的String对象,存储”Hello”,并将内存上的String对象引用地址返回,所以s3与s1、s2引用的不是同一个字符串地址。
s1与s2指向的都是常量池中的字符串常量,所以它们比较的是同一块内存地址,而s3指向的是堆里面的一块地址,说的具体点应该是区域,s1跟s3,s2跟s3比较都是不相等的,都不是同一块地址。
了解了String类的工作原理,回归问题本身:
在String的工作原理中,已经提到了,new一个String对象,。
55、讲下java中的math类有那些常用方法/h3>
- Pow():幂运算
- Sqrt():平方根
- Round():四舍五入
- Abs():求绝对值
- Random():生成一个0-1的随机数,包括0不包括1
56、String类的常用方法有那些/h3>
- charAt:返回指定索引处的字符
- indexOf():返回指定字符的索引
- replace():字符串替换
- trim():去除字符串两端空白
- split():分割字符串,返回一个分割后的字符串数组
- getBytes():返回字符串的byte类型数组
- length():返回字符串长度
- toLowerCase():将字符串转成小写字母
- toUpperCase():将字符串转成大写字符
- substring():截取字符串
- format():格式化字符串
- equals():字符串比较
57、Java中的继承是单继承还是多继承
- charAt:返回指定索引处的字符
- indexOf():返回指定字符的索引
- replace():字符串替换
- trim():去除字符串两端空白
- split():分割字符串,返回一个分割后的字符串数组
- getBytes():返回字符串的byte类型数组
- length():返回字符串长度
- toLowerCase():将字符串转成小写字母
- toUpperCase():将字符串转成大写字符
- substring():截取字符串
- format():格式化字符串
- equals():字符串比较
57、Java中的继承是单继承还是多继承
Java中既有单继承,又有多继承。对于java类来说只能有一个父类,对于接口来说可以同时继承多个接口
58、Super与this表示什么/h3>
Super表示当前类的父类对象
This表示当前类的对象
59、普通类与抽象类有什么区别/h3>
普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
60、什么是接口什么需要接口/h3>
接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类,接口弥补了java单继承的缺点
61、接口有什么特点/h3>
- 接口中声明全是public static fifinal修饰的常量
- 接口中所有方法都是抽象方法
- 接口是没有构造方法的
- 接口也不能直接实例化
- 接口可以多继承
62、抽象类和接口的区别/h3>
抽象类:
-
抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
-
包含抽象方法的类,一定是抽象类。
-
抽象类只能被继承,一个类只能继承一个抽象类。
接口:
-
全部的方法都是抽象方法,属性都是常量
-
不能实例化,可以定义变量。
-
接口变量可以引用具体实现类的实例
-
接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
-
接口之间可以多实现
-
一个具体类可以实现多个接口,实现多继承现象
63、Hashcode的作用
抽象类:
-
抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
-
包含抽象方法的类,一定是抽象类。
-
抽象类只能被继承,一个类只能继承一个抽象类。
接口:
-
全部的方法都是抽象方法,属性都是常量
-
不能实例化,可以定义变量。
-
接口变量可以引用具体实现类的实例
-
接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
-
接口之间可以多实现
-
一个具体类可以实现多个接口,实现多继承现象
63、Hashcode的作用
java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。当我们在set中插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样的方法就会比较满。
于是有人发明了哈希算法来提高集合中查找元素的效率。 这种方式。
hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
64、 Java的四种引用,强弱软虚
强引用
强引用是平常中使用最多的引用,,使用方式:
软引用
,使用方式:
可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。
弱引用
弱引,使用方式:
可用场景:Java源码中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,
一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。
虚引用
虚引用的回收机制跟弱引用差不多,但是它中。注意哦,其它引用是被JVM回收后才被传入ReferenceQueue中的。由于这个机制,所以。还有就是,虚引用创建的时候,必须带有ReferenceQueue,使用例子:
可用场景: 对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效
上诉所说的几类引用,都是指对象本身的引用,而不是指 Reference 的四个子类的引用( SoftReference 等)。
65、Java创建对象有几种方式/h3>
java中提供了以下四种创建对象的方式:
-
new创建新对象
-
通过反射机制
-
采用clone机制
-
通过序列化机制
66、有没有可能两个不相等的对象有相同的hashcode
有可能.,两个不相等的对象就会有相同的 hashcode 值.当hash冲突产生时,一般有以下几种方式来处理:
- 拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.

-
开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入
-
再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.
67、拷贝和浅拷贝的区别是什么/h3>
浅拷贝:
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.
深拷贝:
被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.
68、static都有哪些用法/h3>
所有的人都知道static关键字这两个基本的用法:.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:
此外static也多用于修饰内部类,此时称之为静态内部类.
最后一种用法就是,即 import static .import static是在JDK 1.5之后引入的新特性,可以用来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名,比如:
69、a=a+b与a+=b有什么区别吗/h3>
+= 操作符会进行,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型, 而a=a+b则不会自动进行类型转换.
如:
以下代码是否有错,有的话怎么改/p>
有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short
类型,此时编译器会 错.
正确写法:
+=操作符会对右边的表达式结果强转匹配左边的数据类型,所以没错.
70、final、finalize()、finally
性质不同
-
final为关键字;
-
finalize()为方法;
-
finally为区块标志,用于try语句中;
作用
-
final为,final标识的关键字存储在常量池中
-
finalize()方法在Object中进行了定义,,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
-
finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
71、JDBC操作的步骤
- 加载数据库驱动类
- 打开数据库连接
- 执行sql语句
- 处理返回结果
- 关闭资源
72、在使用jdbc的时候,如何防止出现sql注入的问题。
使用PreparedStatement类,而不是使用Statement类
73、怎么在JDBC内调用一个存储过程
使用CallableStatement
74、是否了解连接池,使用连接池有什么好处/h3>
数据库连接是非常消耗资源的,影响到程序的性能指标。
连接池是用来分配、管理、释放数据库连接的,可以使应用程序重复使用同一个数据库连接,而不是每次都创建一个新的数据库连接。通过释放空闲时间较长的数据库连接避免数据库因为创建太多的连接而造成的连接遗漏问题,提高了程序性能。
75、你所了解的数据源技术有那些用数据源有什么好处/h3>
Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;来维护数据库信息,而不是通过硬编码。。
76、&和&&的区别
&是。&&,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处理的前面为false不再处理后面的内容。
77、静态内部类如何定义
定义在类内部的静态类,就是静态内部类。
-
静态内部类可以访问外部类所有的静态变量和方法,即使是 private 的也一样。
-
静态内部类和一般类一致,可以定义静态变量、方法,构造方法等。
-
其它类使用静态内部类需要使用“外部类.静态内部类”方式,如下所示:
-
Java集合类HashMap内部就有一个静态内部类Entry。Entry是HashMap存放元素的抽象,HashMap 内部维护 Entry 数组用了存放元素,但是 Entry 对使用者是透明的。像这种和外部类关系密切的,且不依赖外部类实例的,都可以使用静态内部类。
78、什么是成员内部类
定义在类内部的非静态类,就是成员内部类。成员内部类不能定义静态方法和变量(fifinal修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。实例:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!