复习Java基础

Java语言的特点

  • 简单易学
  • 面向对象(封装 继承 多态)
  • 安全可靠
  • 支持多线程
  • 支持网络编程
  • 平台无关
  • 编译与解释并存

JVM
Java虚拟机(JVM)是用来运行Java字节码的,针对不同的系统有特定的实现 目的是为了使得相同的字节码在不同的系统上得到相同的结果

Java程序从源代码到二进制机器码经过三步:
源代码(.java) > 字节码 (.class) > 二进制机器码

第一步是通过javac编译成为.class 文件 在通过JVM解释成二进制机器码运行

因为JVM对字节码是逐行解释执行,所以效率比较低,后来引入了JIT编译器 ,当JIT编译器完成第一次编译之后,会将二进制机器码保存下来,下次可以直接使用。 根据二八定律 ,消耗大部系统资源的只有那一小部分的代码。执行得越多就越快。

Java与c++的区别

  • Java有自动内存管理机制,c++需要手动释放
  • 都是面向对象 Java是单继承 c++是多继承 不过Java可以使用接口来实现多继承
  • Java不提供指针直接访问内存
  • 在 C 语言中,字符串或字符数组最后都会有一个额外的字符’\0’来表示结束。但是,Java 语言中没有结束符这一概念。(Java里面是对象 在编译过程中 Java对象大小可以确定 所以不需要用’\0’来表示结束)

为什么说 Java 语言“编译与解释并存”?
Java程序从编写到运行需要经过三步,先通过javac编译成.class文件 在通过JVM来解释执行 所以我们认为 Java 语言编译与解释并存。

字符型常量和字符串常量的区别?

  • 字符常量是以’‘引起的一个字符,字符串是“”引起的0个或者多个字符
  • 字符常量可以看成是一个整型值(ASCII值) 字符串代表一个地址值
  • 字符常量占2个字节 字符串占多个字节
  • 标识符和关键字的区别是什么?
    标识符是一个为类名 方法名 变量 常量 的取名,关键字是特殊的标识符,是在Java语言里面赋予了特殊的含义。

continue、break、和 return 的区别是什么?

  • continue;结束这一次循环 继续下一次循环
  • break:跳出循环
  • return:跳出方法

Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?

Java 泛型:提供了编译时的类型安全检查机制。是一个伪泛型 ,因为Java在编译期间,会将所有的泛型信息擦除,通过字节码文件可以看到 在代码中一定的List 类型,在编译之后都会编程List,通过反射机制可以向List里面添加其他类型的数据,所以可以得出,泛型在Java编译期间类型擦除。

List<Integer> list = new ArrayList<>();
list.add(12);
//这里直接添加会报错
list.add("a");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通过反射添加,是可以的
add.invoke(list, "kl");

常用的通配符为: T,E,K,V,?

  • T:一个Java类型
  • ?:不确定的类型
  • E:Element
  • K V:键值对

**==和 equals 的区别
“==”对比的是两个对象的地址是否相同 或者是基本类型的值
equals 对比的是两个对象的的内容是否相同 不能用于比较基本数据类型的变量
如果没有覆盖equals()方法 那么对比的就是对象的地址值,反之,对比对象的内容

为什么重写 equals 时必须重写 hashCode 方法?

  • 两个对象相等,则equals 相等 hashCode 也相等
  • hashCode 相等不一定对象就相等
  • 所以重写了equals 那么也要重写hashCode 才能使得对象相等
  • hashCode 是在堆上生成一个独特的值

自动装箱与拆箱

8 种基本类型的包装类和常量池

  • Boolean直接返回 True Or False
  • Byte、Short、 Integer、Long的常量池都是[-128,127]
  • Character 的常量池都是[0,127]
    因为这些类型的值是可以确定个数的 但是Float Double不能确定一个范围的值,所以Float Double没有实现常量池

为什么说Java中只有值传递

  • 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递(pass by
    reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

值传递和引用传递之前的区别的重点是什么。
在这里插入图片描述
值传递和引用传递的区别并不是传递的内容。而是实参到底有没有被复制一份给形参。在判断实参内容有没有受影响的时候,要看传的的是什么,如果你传递的是个地址,那么就看这个地址的变化会不会有影响,而不是看地址指向的对象的变化。
Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。

重载和重写的区别

  • 重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理
  • 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法

String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
String StringBuffer线程安全 StringBuilder线程不安全
String 底层使用 final 修饰存储数据的byte[]

对于三者使用的总结:

  • 操作少量的数据: 适用 String
  • 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
  • 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值