小孟的java突击学习之旅(一)

Java基本功

  • java入门
    • java语言特点
    • JVM 、JDK和JRE
    • Java与C++的联系
    • 为什么说Java语言“编译与解释并存”?
    • 字符型常量和字符串常量的区别?
    • continue、break、return的区别
    • ==和equals区别
    • hashCode()与equals()
  • 基本数据类型
    • Java的基本类型与对应的包装类型是哪些,各自占多少字节
  • 方法
    • 为什么Java中只有值传递
    • 深拷贝和浅拷贝

java入门

java语言特点

  1. 简单易学
  2. 面向对象(封装、继承、多态)
  3. 通过Java虚拟机实现平台无关性
  4. 一次编译,多处运行
  5. 支持多线程(C++没有内置多线程,调用操作系统的多线程功能)
    支持网络编程且方便

JVM 、JDK和JRE

JVM是运行Java字节码的虚拟机。针对不同系统有不同实现,使用相同的字节码,会给出相同的结果。

什么是字节码?好处是?

Java与C++的联系

  1. 都是面向对象的语言,支持封装、多态、继承
  2. Java不提供指针直接访问内存,程序内存更安全
  3. Java不支持多继承,C++支持;但Java的接口可以多继承
  4. Java自动内存管理机制,C++需要手动释放无用内存
  5. C语言中,字符串或字符数组最后都会有一个额外的字符\o"来表示结束,Java不需要。

为什么说Java语言“编译与解释并存”?

高级编程语言按程序的执行方式分为两类:编译型和解释性。编译型针对特定的操作系统将源代码一次性翻译成该平台执行的机器码。而解释z型语言是指解释器对源代码逐行解释成特定平台的机器码并立即执行。
因为Java程序需要先通过编程生成字节码(.class文件),这种字节码需要经过Java解释器来解释执行。

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

  1. 形式上:前者常为单引号引起,后者双引号
  2. 含义上:前者相当于一个整形值(ASCII值),可以参加表达式运算;后者代表一个地址值
  3. 占内存:Java中占2字节;若干字节

Java内基本类型所占存储空间大小不变性是java程序比娶她大多语言可移植性更高的原因。

continue、break、return的区别

continue指跳出当前循环、break表示跳出整个循环体执行后续语句、return跳出方法

==和equals区别

==判断两个对象的***地址***是否相等。
即判断两个对象是不是同一个对象。(基本数据类型比较值;引用类型比较内存地址)

equals()的作用为判断两个对象是否相等。不能用于比较基本数据类型。equals()方法存在于Object类中。

public class test1 {
     
	public static void main(String[] args) {
     
	String a = new String("ab"); // a 为⼀个引⽤
	String b = new String("ab"); // b为另⼀个引⽤,对象的内容⼀样
	String aa = "ab"; // 放在常量池中
	String bb = "ab"; // 从常量池中查找
	if (aa == bb) // true
	System.out.println("aa==bb");
	if (a == b) // false,⾮同⼀对象
	System.out.println("a==b");
	if (a.equals(b)) // true
	System.out.println("aEQb");
		if (42 == 42.0) {
      // true
		System.out.println("true");
		}
	}
}

equals()存在两种情况:
类没有覆盖equals()方法时,默认使用Object类equals()方法,等价于“==”;
类覆盖了equals()方法时,用于判断两个对象的内容。

hashCode()与equals()

  1. 什么是hashCode()?
  2. 为什么要用hashCode()?
  3. 为什么重写equals时必须覆盖hashCode方法
  4. 为什么两个对象hashcode相同,它们不一定相等?
  • hashCode()的作用是用于获取哈希码,哈希表也称为散列表。实际上是将对象的内存地址转换成整数之后返回int整形数,用于去确定该对象在哈希表中的位置。哈希表存储的是键值对(Key-value),能根据快速的检索出对应的
  • 当把对象加入HashSet时(以hashSet为例),hashSet首先会计算加入对象的hashcode值来判断对象该加入的位置,与此同时将其他对象的hashCode比较。若发现有相同的hashCode值,会调用equals()方法来判断hashcode相等的两个对象是否也相等。如果相同,不会让其加入,如果不同则重新散列到其他位置。 这样大大减小了equals()的执行次数,大大提高运行速度。
  • hashcode()的默认行为是对堆上的对象产生独特的整形数,如果没有重写hashcode(),则该类的两个对象无论如何也不会相等(级指向相同的数据)
  • hashcode()所使用的杂凑算法可能会刚好让多个对象传回相同的杂凑值。 hashcode只是用来缩小查找范围的

基本数据类型

Java的基本类型与对应的包装类型是哪些,各自占多少字节

  1. 6种数字类型:short、long、byte、int、float、double
  2. 1种字符型:char
  3. 1种布尔型:boolean
    对应的包装类:Short、Long、Byte、Integer、Float、Double、Character、Boolean。
    2、8、1、4、4、8、2、

方法

为什么Java中只有值传递

按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用则表示方法接受的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用对应的变量值。

Java语言总是按值调用,也就是说,方法得到的是所有参数值的拷贝,不能修改传递给它的任何参数变量的内容。

深拷贝和浅拷贝

  1. 浅拷贝和深拷贝对基本数据类型都是进行值传递,而对于引用数据类型,浅拷贝对引用数据类型进行传递般的拷贝,而深拷贝是传建一个新的对象,并复制其内容。
    小孟的java突击学习之旅(一)_第1张图片

你可能感兴趣的:(java)