java基础

1、java的基本数据类型及封装类

byte、int、short、long、float、double、boolean、char
boolean单独使用占4个字节,在数组中占1个字节
基本类型所占的储存空间是不变的,放在栈中,直接储存值

1.1、基本类型与对应的封装类型的区别

  • 基本类型按值传递,而封装类按引用传递
  • 基本类型在栈中创建,封装对象在堆中创建,对象的引用在栈中创建,基本类型由于在栈中效率会更高,但可能会存在内存泄漏的问题

1.2、包装类型的使用场景

  • 基本类型有默认值,而包装类型初始为null
  • POJO类必须使用包装类型,而在本地变量推荐使用基本类型
  • 这个字段允不允许null值,如果允许,则必然要用封装类,否则,基本类型就可以了
  • 集合类、泛型、反射调用函数,就需要用包装类

2、== 与 .equals 的区别

  • == 对于基本类型来说是比较两个值是否相同,对于引用类型来说是比较的是引用地址是否相同
  • 而 equals默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下equals 比较的是值是否相等

3、while与do while的区别

  • while(){} 在循环的开始判断满足条件执行
  • do{}while() 至少循环一次,循环的结尾判断是否满足条件

4、public,private,protected区别

5、float = 3.4,是否正确


double赋值给float属于向下转型,需要强制转型
float = float(3.4)

6、short s1=1,s1 = s1+1有错吗,short1 s1 = 1,s1+=1有错吗

  • 1是int类型,s1+1也是int类型,int赋值给short属于向下转型,强制转换s1 = short(s1+1);
  • += 会进行隐式自动类型转换,s1+=1;相当于s1 = short(s1+1);

7、&与&&区别

  • & 按位与、逻辑与 a=b & b=c(即使前面是false,后面还会继续判断)
  • && 短路与 a=b && b=c(前面是false,后面就不用判断)

8、String str = "a" 与 String str = new String("a") 区别

内存分配方式不一样
String str = "a" 常量池 (方法区)
String str = new String("a") 堆内存(对象放在堆中)

String a = "string";
String b = "string";
String c = new String("string");
String d= new String("string");
System.out.println(a==b); // true
System.out.println(a==c); // false
System.out.println(c==d); //false
System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); //true
System.out.println(c.equals(d)); //true

true   -->声明变量a,b的同时,系统将字符串"string"这个值内存中的地址赋给了a,b,所以这两个引用的是 
       同一个地址值,他们两个共享同一个内存,(a==b)就是比较两个值是否相同
false  -->系统将字符串"string"这个值内存中的地址赋给了a,而new String("string")是将对象地址赋给c
false  -->new String("string")是将对象地址赋给c,然后将对象的地址值赋给d,虽然c的值和d的值是相同的,但是他们依然不是同一个对象了

true	-->equals 比较的一直是值("string"),所以结果都为 true
true	-->equals 比较的一直是值("string"),所以结果都为 true
true	-->equals 比较的一直是值("string"),所以结果都为 true

9、string、StringBuilder、StringBuffer的区别

  • String是内容不可变的字符串,String底层使用了一个不可变的字符数组(final char[])
  • StringBuffer是内容可变字符串,StringBuffer底层使用的是可变的字符数组(char[],没有使用final来修饰)
  • 拼接字符串使用StringBuffer,StringBuilder,append
  • StringBuilder是线程不安全的,效率高,StringBuffer是线程安全的(添加了同步锁synchronized),效率低

10、重写与重载的区别

  • 重写:当一个子类继承父类,而子类方法与父类方法的名称,参数个数,类型完全一致,称子类中的这个方法重写了父类中的方法。(方法名,参数个数,类型一致)
  • 重载:一个类中一个方法与另一个方法名相同,参数个数类型不同(方法名相同,参数个数类型不同)

11、设计模式,常用的设计模式

设计模式是经过前人无数次实践总结出来的,设计过程可以反复使用的,可以解决特定问题的设计方法。

  • 单例(饱汉模式&&饥汉模式)

构造方法私有化,除了自己类中创建外其他地方都不能创建,在自己类中创建一个单实例(饱汉模式是先创建单实例,而饥汉模式是需要的时候才创建)区别 ,提供一个方法获取该实例的对象(创建时需要进行方法同步)

  • 工厂模式:SpringIOC就是使用了工厂模式(对象的创建交给工厂创建)

  • 代理模式:SpringAop就是使用了动态代理

package com.ccshen.basic;

public class PersonFactory {
    
    //构造方法私有化
    private PersonFactory() {
    }
    
    //饿汉模式(创建单实例)
//    private static PersonFactory instance  = new PersonFactory();
    //饥汉模式
    private static PersonFactory instance  = null;
    
    //提供方法获取
    public static PersonFactory getInstance() {
        if(instance  == null) {
            instance = new PersonFactory();
        }
        return instance;
    }
    
    public static void main(String[] args) {
        PersonFactory.getInstance().toString();
    }

}

12、java的反射机制

java中的反射机制是运行中,对于任何一个类都知道类中的方法、属性,并且对于任何一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态的调用对象方法的功能。

13、反射的应用场合

编译时类型和运行时类型
在 Java 程序中许多对象在运行是都会出现两种类型:编译时类型和运行时类型。
编译时的类型由声明对象时实用的类型来决定,运行时的类型由实际赋值给对象的类型决定 
Person p=new Student();
其中编译时类型为 Person,运行时类型为 Student

14、java 反射 API

  • Class 类:反射的核心类,可以获取类的属性,方法等信息
  • Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值
  • Method 类: Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。
  • Constructor 类: Java.lang.reflec 包中的类,表示类的构造方法

15、java内部类

  • 内部类 : 静态内部类,成员内部类,局部内部类,匿名内部类
  • 静态内部类 : 可以访问外部类所有的静态变量和方法,可以定义静态变量、方法,构造方法
  • 成员内部类 : 非静态的,不能定义静态的方法和变量
  • 局部内部类 : 定义在方法中的类,如果考虑类在方法中使用
  • 匿名内部类 : 继承一个父类或实现一个接口,直接使用 new 来生成一个对象的引用

16、抽象类与接口的区别

16.1、抽象类

  1. 抽象类使用abstract修饰;
  2. 抽象类不能实例化,即不能使用new关键字来实例化对象;
  3. 含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;
  4. 抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法;
  5. 如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;
  6. 抽象类中的抽象方法只有方法体,没有具体实现;

16.2、接口

  1. 接口使用interface修饰;
  2. 接口不能被实例化;
  3. 一个类只能继承一个类,但是可以实现多个接口;
  4. 接口中方法均为抽象方法;
  5. 接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)

17、String常用方法

  • indexOf() : 返回字符串的索引
  • charAt() : 返回指定索引处的字符
  • replace() : 字符串的替换
  • trim() : 去除字符串两端的空白
  • split() : 分割字符串
  • getBytes() : 返回字符串的byte数组
  • length() : 返回字符串的长度
  • subString() : 截取字符串
  • equals() : 字符串比较
  • toLowerCase() : 字符串变小写
  • toUpperCase() : 字符串变大写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值