Java基础面试概念问题部分总结

  1. 面向对象与面向过程(理解)
    面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
    面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

  2. 方法的重载概念
    定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
    总结:“两同一不同”:同一个类、相同方法名
    参数列表不同:参数个数不同,参数类型不同

  3. 方法的重写概念
    子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作

     ## 重载与重写的对比理解
     重载,是指允许存在多个同名方法,而这些方法的参数不同。
     编译器根据方法不同的参数表,对同名方法的名称做修饰。
     对于编译器而言,这些同名方法就成了不同的方法。
     它们的调用地址在编译期就绑定了。
     Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。
     对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
     而重写是指子类重新编写父类中声明的方法,只是方法体不同。
     具体的运用就体现在多态里,只等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。 
    
  4. 比较运算符== 和 equals() 区别
    比较运算符== :
    ①可以使用在基本数据类型变量和引用数据类型变量中
    ②如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
    ③如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
    补充: == 符号使用时,必须保证符号左右两边的变量类型一致。

equals():
① 是一个方法,而非运算符
②只能适用于引用数据类型
③ Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}

  • 说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
    ⑤像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
    ⑥ 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写。

  • 重写的原则:比较两个对象的实体内容是否相同
    具体要看自定义类中有没有重写Object的equals方法,一般重写equals方法会比较类中的相应属性是否都相等。

  • 包装类的使用
    基本数据类型<-转->包装类:JDK 5.0 新特性:自动装箱 与自动拆箱
    基本数据类型、包装类<-转->String:调用String重载的valueOf(Xxx xxx)
    String<-转->基本数据类型、包装类:调用包装类的parseXxx(String s)
    注意:转换时,可能会报NumberFormatException

  • 手写单例模式

    • 饿汉式
class Bank{
	//1.私化类的构造器
	private Bank(){
	}
	//2.内部创建类的对象
	//4.要求此对象也必须声明为静态的
	private static Bank instance = new Bank();
	//3.提供公共的静态的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
}
  • 懒汉式
// 未涉及线程安全问题
class Company{
	//1.私化类的构造器
	private Company(){
	}
	//2.内部创建类的对象
	//4.要求此对象也必须声明为静态的
	private static Companyinstance = new Company();
	//3.提供公共的静态的方法,返回类的对象
	public static CompanygetInstance(){
		return instance;
	}
}
// 懒汉式线程安全的单例模式(实际常用)
class Company{
    private Company(){}
    private static Companyinstance = null;
    private static CompanygetInstance{
        if(instance == null){
            synchronized (Company.class) {
                if(instance == null){
                    instance = new Bank();
                }
            }
        }
        return instance;
    }
}

7.关于int与Integer

        Integer i = new Integer(1);
		Integer j = new Integer(1);
		System.out.println(i == j);//false
		//Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
		//保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
		//-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率
		Integer m = 1;
		Integer n = 1;
		System.out.println(m == n);//true

		Integer x = 128;//相当于new了一个Integer对象   Integer x = new Integer(); 
		Integer y = 128;//相当于new了一个Integer对象
		System.out.println(x == y);//false
	}

8.error和Exception

这里有详细的解释
–8.1throw 和 throws区别:
throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。
throws 属于异常处理的一种方式,声明在方法的声明处。

9.线程实现方式(三种)
前两种是继承Thread类的方式与实现Runnable接口方式
开发中:优先选择:实现Runnable接口的方式

  • 原因:

    1. 实现的方式没类的单继承性的局限性
    2. 实现的方式更适合来处理多个线程共享数据的情况。
  • 联系:public class Thread implements Runnable

  • 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
    目前两种方式,要想启动线程,都是调用的Thread类中的start()。

设计模式(Spring、JDK源码中有大量实践)

是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。

1.2 常用设计模式 — 23种经典的设计模式 GOF
创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值