Java常见知识点

一,面向对象编程的四大特性及其含义?

面向对象是一种思想,即将世间万物都视为对象。面向对象的四大基本特性分别是封装,继承,抽象和多态。

  • 封装:封装就是将类的具体细节不对外公开,只留一个指定的访问的通道,这样做就保证了这个类的独立性和复用性
  • 继承:这是一种复用机制,一个类可以继承另一个类或者接口,那么这个类就会有继承的类或接口的非私有属性和方法,提高了软件的可重用性和可扩展性
  • 抽象:提取一些事物的主要信息然后归结为类,这个提取出来的类是一种模型,它还包含属性和行为,对抽象出来的类实例化得到对象
  • 多态:编译和运行的类型不一致就是多态,Java实现多态有三个必要条件:继承、重写、向上转型
    新建一个Food类:
public class Food {

	public void aaa() {
		System.out.println("Food类的aaa方法");
		bbb();
	}
	
	public void bbb() {
		System.out.println("Food类的bbb方法");
	}
}

再建一个Apple类继承Food类:

public class Apple extends Food{

	public void aaa(String a) {
		System.out.println("Apple类的aaa方法");
		bbb();
	}

	@Override
	public void bbb() {
		System.out.println("Apple类的bbb方法");
	}

}

最后建一个测试类:

public class Run {

	public static void main(String[] args) {
		Food f = new Apple();
		f.aaa();
	}
}

运行结果:

Food类的aaa方法
Apple类的bbb方法

这个简单的例子便实现了多态
Food f = new Apple();这句代码的意义是,先Food f 创建一个指向Food对象的引用,然后new Apple()调用Apple类的构造器,实例Apple类,然后让这个指向Food类的引用 f 指向实例的Apple对象,由于Apple类是继承Food类的,所以Apple类会向上转型,Apple类中的aaa(String a) {}方法在Food类中没有,所以会被舍弃,Food类中的bbb(){}方法在Apple类中被重写,所以会被保存

二,java中String、StringBuffer、StringBuilder的区别
1,是不是可变
  • String:String类中使用字符数组保存字符串,因为有final修饰,所以是不可变的
    /** The value is used for character storage. */
    private final char value[];
  • StringBuffer和StringBuilder:StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,可知这两种对象都是可变的
    /**
     * The value is used for character storage.
     */
    char[] value;
2,线程是否安全
  • String:String中的对象是不可变的,也就可以理解为常量,显然线程安全
  • StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
    @Override
    public synchronized StringBuffer append(Object obj) {
        toStringCache = null;
        super.append(String.valueOf(obj));
        return this;
    }

    @Override
    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

  • StringBuilder并没有对方法进行加同步锁,所以是非线程安全的
3,执行速度

StringBuilder > StringBuffer > String
String变量是常量,一旦创建就不可更改,所以每次对String变量的操作都是将当前的变量回收再重新创建对象,所以比较费时

4,试用范围
  • String:适用于少量的字符串操作的情况
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值