自我总结下Java 基础知识点(小白 第一天)

1.说说&和&&的区别。

&和&&都表示与的意思,既表达式俩边都成立,结果才成立。
&&是逻辑运算符,&&有短路作用,既当表达式左边为假时,不需要计算右边,整个的结果直接为假; & 没有
&是位运算符,&的左右俩边可以是布尔类型,也可以是数值;&&俩边只能是布尔类型

2.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第一种情况,s1是short类型,在计算s1=s1+1时,前边是short型,后边是int型,不能自动转换。由于没有强转,要报 类型错误。
第二种情况,使用了+=这个java自带的运算符,java内部会对其进行处理,所以编译通过,不会报错。
图片

3.Integer与int的区别

int是八大基本数据类型之一,Integer是int的封装类。
int的默认值是0,Integer的默认值是null,此时的0代表这个数赋值0,而null代表没接收到这个值
Integer提供了与整数相关的操作,int没有

4.==与equals的区别

从表面上看,对于基本数据类型==是判断的值是否相等;对于引用数据类型是判断是否为同一个对象
从本质上看,是看是否为一个引用地址
equals是判断值是否相等

5.override(重写)和overload(重载)的区别

重载是在一个类中,方法名相同,参数列表不同(参数类型和参数个数)的一种现象
1.重载与返回值类型无关
2.不能通过访问修饰符进行重载
如下是重载:

public void add(int x,int y){
	System.out.println(x+y);
}
public void add(int x,int y,int z){
  System.out.println(x+y+z);
}
public int add(int x,int y){  //编译报错
	return x+y;
}

重写是在父子类中,子类重写父类的方法,要求方法名与参数列表,返回值类型完全相同。子类重写父类规范要在子类的方法前加注解@Override

1.重写的返回值类型可以改,但只能是父子类
例如:

public Father a(Father f){
        System.out.println("aaaaa");
       return f;
 }
  @Override
  public Son a(Father f){
   System.out.println("bbbbbb");
   Son s=(Son)f;
        return s;
    }

2.重写的访问修饰符得大于等于原来的
3.不能重写私有方法
4.参数列表的顺序与类型必须一样,变量名可不同

7.接口与抽象类的区别

抽象类和接口的区别:语法的区别是低层次的
1、接口中全部都是public抽象方法,(新版1.8可以有默认和静态方法)而抽象类可以有非抽象方法
2、接口中的属性都是常量,而抽象类不一定
3、接口中没有构造方法,而抽象类有,但抽象类的构造方法只是为了产生子类对象初始化父类属性
4、接口是给类实现的,使用implements,一个类可以实现多个接口,而抽象类是其他类给继承的extends
从语法上可以认为接口是一种特殊的抽象类,但从设计理念上这么理解就是错误的。
设计理念上的区别:
1、抽象类表示的是各个子类的共同特征,是一个“中间产品”,其子类才是“最终产品”,
子类和父类之间是"is a"关系(猫、狗是动物),即父类和子类在概念本质上是相同的
2、接口表示一种约定(USB),一种能力(比如猫、鱼、燕子都继承动物类,但可以实现不同接口,
如爬树、游泳,飞翔)。接口定义“做什么”,实现类负责“怎么做”,体现了功能(约定)与实现相分离的原则。

8.JDK,JRE,JVM的联系与区别

JDK是java开发工具包,JDK包括JRE,类库,java工具
JRE是java运行环境,JRE包括JVM,JRE里有运行.class的java.exe
JVM是java虚拟机,java虚拟机在执行字节码时,把字节码解释成具体平台的机器指令执行,这也是java语言跨平台的根源,是“一次编译,到处运行”的原因
联系:JDK下的jre文件夹下有俩个文件夹lib和bin;在这里可以理解为bin就是jvm,lib就是类库;所以JRE=JVM+类库
我们利用JDK开发属于自己的java程序,javac编译成字节码,在JRE上运行这些字节码,JVM解析这些字节码,最终映射到CPU指令集或OS的系统调用
区别:
JDK与JRE的区别:
1.JDK有javac.exe;JRE没有
2.JDK是开发环境,JRE是运行环境
JRE与JVM的区别:
1.JVM执行.class需要JRE下lib类库的支持(尤其是rt.jar)