Java-面试题(2)

java 中操作字符串都有哪些类?

它们之间有什么区别? String、StringBuffer、StringBuilder String与后两者的区别:String声明的是不可变对象,每次操作都会生成新的String对象,而后两者可 以在原有对象的基础上进行操作,所以在需要经常改变字符串内容的情况下最好不要使用String,否则 会造成资源浪费。 StringBuffer与StringBuilder的区别:前者是线程安全的,后者是非线程安全的,但兜着的性能却高 于前者,所以在单线程环境下StringBuilder性能优于StringBuffer,在多线程环境下,StringBuffer安 全性高于StringBuilder。

(1)列举字符串操作方法 indexOf():返回指定字符的索引。 charAt():返回指定索引处的字符。 replace(char oldchar, char newchar):字符串替换。 trim():去除字符串两端空白。 split():定义一个分隔符分割字符串,若分隔符为子串,那么该字串去除 getBytes():返回字符串的 byte 类型数组。 length():返回字符串长度。 toLowerCase():将字符串转成小写字母。 toUpperCase():将字符串转成大写字符。 substring(int start, int end):截取字符串。 equals():字符串比较。 equalsIgnoreCase( ): 忽略字符串大小写的比较 concat(): 两个字符串相连 append(String s) 追加、 reverse()反转 、 delete(int start, int end)删除 、 insert(int offset, int i)插入 、 replace(int start, int end, String str) 替换、 charAt(int index) 索引值、 indexOf(String str) 值索 引、 length() 长度、 toString() 转字符串

(2)String str="i"与 String str=new String(“i”)一样吗? 不一样。前者定义的是一个不可变字符串,存入到常量池中,后者是一个对象,存入到堆内存中。

(3)java的存储机制 1. 堆:位于RAM,只存储创建出的对象,存储分配时间长,但分配灵活(分配空间、存活时间)。 2. 栈:位于RAM,只保存基础数据类型的值和对象引用。每个线程包含一个栈区,每个栈中的数据 都是私有的,共分为三个部分:基本类型变量区、执行环境上下文、操作指令区。 3. 方法区:与堆类似,包含所有的class和static变量(唯一性元素) 4. 常量池:用于保存在编译期已确定的,已编译的 .class 文件中的各种字面量(Literal)和符号引用 (Symbolic References);

抽象类必须要有抽象方法吗?

不是。但包含抽象方法的类一定是抽象类。 (1)抽象类与抽象方法 抽象方法必须被子类的方法所重写,否则其子类的该方法依然是抽象的,子类也必须是抽象的。如果一 个类中有抽象方法,那么该类必须用abstract修饰。抽象类不能被实例化。 (2)抽象类与接口 抽象类不能被实例化,只能被继承,不一定包含抽象方法,只能修饰为public或protected。子类必须 重写父类的抽象方法,否则也为抽象方法和抽象类。抽象类可以具有main方法并且可以运行。 接口支持多继承,一个类也可以实现多个接口。接口可以包含变量、方法,变量被隐式指定为 public static final,方法被隐式指定为public abstract 。接口不能有main方法 Add:接口方法默认是 public abstract 的,且实现该接口的类中对应的方法的可 见性不能小于接口方法的可见性 (3)抽象类与普通类 普通类不能包含抽象方法,可以被实例化 抽象类不能直接实例化。 (4)抽象类可以使用final修饰吗 不能,定义抽象类就是让其他类来继承的,final修饰为最终类就不可继承了。 (5)说一下你对面向对象的理解 面向对象具有三大基本特征,分别是:继承、封装、多态。(第四个特征是抽象) 继承:是面向对象实现代码复用的重要手段,Java通过extends作为关键字实现类的继承,实现继承的类被 称为子类,被继承的类称为父类(有的也被称为基类和超类),父类和子类的关系是一种一般和特殊的关 系。 封装:是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,让外部程序通过 该类提供的方法来实现对内部信息的操作和访问,这种做法有助于规范使用者的行为,让使用者只能通过 事先预定的方法访问数据,提高了代码的可维护性 。 多态:多态的实现离不开继承,在设计程序时,我们可以将参数的类型定义为父类型。在调用程序时,则可 以根据实际情况,传入该父类型的某个子类型的实例,这样就实现了多态。对于父类型,可以有三种形式,即 普通的类、抽象类、接口。对于子类型,则要根据它自身的特征,重写父类的某些方法,或实现抽象类/接口 的某些抽象方法。 (6)说一说重写与重载的区别 两者都是实现多态的方式,重写实现的是运行时的多态,而重载实现的是编译时的多态性。 重写:将父类中的方法在自身中重新写一遍,在方法名、参数列表、返回类型都相同的情况下,对方法 体进行重写。并且重写的方法的访问修饰符范围要大于被重写的方法。 重载:在方法名相同的情况下,参数列表不同,返回值类型也可不同,对方法进行重载。无法通过返回 类型不同来判断是否重载。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

射手座的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值