Java常考知识点

提示:笔记内容

一、java的基本数据类型与包装类

在这里插入图片描述

二、final修饰变量类方法

  1. final修饰变量:对于final修饰的变量来说,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的,也就是说在对其初始化之后便不能再让其指向另一个对象。
    注意:
    对于普通实例变量,Java程序可以对它执行默认的初始化,也就是将实例变量的值指定为默认的初始值0或null,但对于final修饰的实例变量,则必须由程序员显示的赋予初始值。
public static final int a;//这里会报错,未给a赋初始值;
  1. final修饰方法:final来修饰方法,那么表示该方法不能被重写,如果在父类中使用final 来修饰方法,那么该方法就被定义为private,即不可重写,即方法被私有化了。
    注意:
    用final修饰的方法不能被重写,但可以有多个重载。
//对于重写
class father{
	
	public final void speek() {
		System.out.println("Father say");
	}
}
class son extends father{
	@Override
	public void speek() {//speek会编译报错
		System.out.println("sun say");
	}
}
//对于重载
class father{
	
	public final void speek() {
		System.out.println("Father say");
	}
	static void speek(int a) {
		System.out.println(a);
	}
	public static void main(String[] args) {
	father.speek(1);
	}
}
//编译正确:输出1
  1. final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类
    总结:
final类不能被继承,没有子类,final类中的方法默认是final的。 

final方法不能被子类的方法覆盖,但可以被继承。 

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 

final不能用于修饰构造方法。

三、String为什么是不可变的,以及new String(“abc”)创建了几个对象

  1. String为什么是不可变的
    String类中使用字符数组保存字符串,数组前有final修饰符,所以string对象是不可变的。
    private final char value[];
    StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变的
    char[] value;

  2. String str1 = new String(“abc”)创建了几个对象
    一个或者两个
    当字符串常量池中已经有了"abc"这个字符串对象,则new String(“abc”)创建了1个对象,即在堆内存中创建一个存储"abc"的String对象。
    当字符串常量池中没有"abc"这个字符串对象,则new String(“abc”)创建了2个对象,分别是"abc"这个字符串对象和在堆内存中创建一个存储"abc"的String对象。
    String str2=“abc” 可能创建一个对象或者不创建对象,如果"abc"在字符串常量池里不存在,会在字符串常量池里创建一个字符串对象"abc",如果已经存在,str2直接引用这个字符串常量池里的对象

四、String、StringBuffer、以及StringBuilder的区别

String、StringBuffer、以及StringBuilder的区别

五、static修饰变量,方法,代码块

static修饰成员变量:
1.static修饰的静态变量,是一份共享数据,全类对象全都可以用,存在方法区中的静态区中。
2.推荐通过类名调用静态属性,全程操作与对象无关。
3.static修饰的静态属性,是在类加载时进行定义和分配存储空间的。
4.static修饰的变量,一方修改 其他使用方全都受影响。
5.static修饰的成员变量生命周期比对象长。


static 修饰成员方法:
1. static修饰的成员方法中,不能使用类中其他非静态成员和this关键字。
2. static修饰的方法中,可以使用类中其他静态成员。
3. static修饰的方法在类加载时,所有静态修饰的方法或属性按照【顺序结构】进行加载。


static修饰的静态代码:
1.不能使用类内非静态成员和this关键字。
2.可以使用类中的其他静态属性。
3.static修饰的代码块,在类加载时,有且仅执行一次【一般用于程序的初始化】
4.static修饰的静态代码块,执行顺序优先于非静态内容,所以先与构造方法执行。
5.静态代码块和静态变量,按照基本的【顺序结构】执行。


六、重写跟重载的区别

重写和重载的区别是什么,主要就如下几点区别:
1、定义不同:重载是定义相同的方法名、参数不同,重写是子类重写父类的方法
2、范围不同:重载是在一个类中,重写是子类与父类之间的
3、多态不同:重载是编译时的多态性,重写是运行时的多态性
4、参数不同:重载的参数个数、参数类型、参数的顺序可以不同,重写父类子方法参数必须相同
5、修饰不同:重载对修饰范围没有要求,重写要求重写方法的修饰范围大于被重写方法的修饰范围

多态是一个类需要表现出多种形态,子类重写父类的方法,使子类具有不同的方法实现

七、接口跟抽象类

首先先来说一下抽象类
要想了解抽象类先看一下抽象方法,抽象方法是一个特殊的方法,他只有声明没有具体的实现。抽象方法用abstract关键字修饰。有抽象方法的类就就是抽象类,抽象类也有abstract关键字修饰。
需要注意的是,
1,抽象类的存在就是为了继承,所以用private方法来修饰抽象方法。
2,包含抽象方法的类叫做抽象类,但并不是抽象类里只有抽象方法。
3,子类继承了抽象类必须实现父类的抽象方法,如果没有实现,那么子类也将会是抽象类。
4,抽象类不能用来创建对象。
再来看一下接口:
接口用关键字interface来实现,接口指的是调用别人的方法或者函数。接口可以看出java是一种对行为的抽象。
接口需要注意的是:
1,接口中可以有变量和方法,并且接口中的变量会被隐式的被public static final来修饰(并且只能用public static final来修饰),方法会隐式的被public abstract来修饰,并且只能用来public abstract来修饰。也就是说接口中所有的方法不能有实现方法,也就是说接口中的方法都是抽象方法。
2,如果要写这个接口的实现方法,需要定义一个实现类,并且通过implements来实现接口中的方法。
重点来了,看完上面就可以看出接口和抽象类的区别了。
主要区别:
 1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
 2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
 3)抽象类是一个类,而接口不是类。

八、反射、继承、枚举、异常等知识点

反射、继承、枚举、异常等知识点

九、为什么要重写hashcode和equals方法,以及hashcode相同equals是否相同

为什么要重写hashcode和equals方法,以及hashcode相同equals是否相同

十、JDK 1.7与1.8之前的区别

十一、 i++ 和 ++i

i++ 和 ++i

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值