Java基础

1.1 基础概念

1.1.1 特点

简单易学;面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);可靠性;
安全性;支持多线程;支持网络编程并且很方便;编译与解释并存;

1.1.2 四类八种

基本都实现了常量池,实现常量池意味着不创建对象时,取值区间在常量池区间内的,都是从常量池取值处理

Integer i1 = 33; Integer i2 = 33; 
System.out.println(i1 == i2);// 输出 true 在常量池区间内,不创建对象 
Integer i11 = 333; 
Integer i22 = 333; 
System.out.println(i11 == i22);// 输出 false 不在常量池区间内,创建对象
类型 基本类型 包装类 位数 字节 默认值 常量池
整形 int Integer 32 4 0 [-128,127]
整形 short Short 16 2 0 [-128,127]
整形 long Long 64 8 0L [-128,127]
整形 byte Byte 8 1 0 [-128,127]
字符型 char Character 16 2 'u0000' [0,127]
浮点型 float Float 32 4 0f
浮点型 double Double 64 8 0d
布尔型 boolean Boolean 1 false true and false

1.1.3 关键字

类型 内容 - - - - - -
访问控制 private protected public default
修饰符 abstract class extends final implements interface native
new static strictfp synchronized transient volatile
程序控制 break continue return do while if else
for instanceof switch case default
错误处理 try catch throw throws finally
包相关 import package
基本类型 boolean byte char double float int long
short null true false
变量引用 super this void
保留字 goto const

native: Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口),native的意思
就是通知操作系统

transient: 取消序列化

volatile: 保证可见性 + 禁止指令重排 ;
内存模型 及并发编程中的三个概念 原子性,可见性,有序性 ( https://www.cnblogs.com/dolphin0520/p/3920373.html )

strictfp: strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float 和 double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。

1.1.4 hashCode

作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的
索引位置。
重写hashCode方法时除了上述一致性约定,还有以下几点需要注意:
(1)返回的hash值是int型的,防止溢出。
(2)不同的对象返回的hash值应该尽量不同。(为了hashMap等集合的效率问题)
(3)《Java编程思想》中提到一种情况
“设计hashCode()时最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该产生同样的值。如果在讲一个对象用put()添加进HashMap时产生一个hashCdoe值,而用get()取出时却产生了另一个hashCode值,那么就无法获取该对象了。所以如果你的hashCode方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的散列码”。

1.1.5 ==和equals的区别,以及为何重写equals方法需要重写hashCode

== : 它的作用是判断两个对象的地址是不是相等。

equals(): 类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对
象。类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;

如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。
但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。因此,equals 方法被覆盖过,则 hashCode 方
法也必须被覆盖。

1.1.6 重载和重写的区别

重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不
同。
重写:
1.返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
2.如果父类方法访问修饰符为 private/final/static 则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明.
3.构造方法无法被重写

1.1.7 成员变量与局部变量的区别

  1. 从语法形式上看:成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被
    public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量
    和局部变量都能被 final 所修饰。
  2. 从变量在内存中的存储方式来看:如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果
    没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
  3. 从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法
    的调用而自动消失。
  4. 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须
    显式地赋值),而局部变量则不会自动赋值。

1.1.8 转发(Forward)和重定向(Redirect)

转发是服务器行为,重定向是客户端行为。

1.1.9 java与C的区别

都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存
**在 C 语言中,字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束。但是,Java 语言中没有结束符
这一概念

1.1.10 Java 和 C++的区别

都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存
在 C 语言中,字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束。但是,Java 语言中没有结束符这一概念

@源:Ddssia

posted @ 2021-12-03 11:28  栋_RevoL  阅读(30)  评论(0编辑  收藏  举报