对最近java基础知识理解不足的方面进行了巩固,写个博客记录一下!😁
基本数据类型相关知识点
数据类型 | 所占字节 | 默认值 |
---|---|---|
byte | 1 | 0 |
short | 2 | 0 |
int | 4 | 0 |
long | 8 | 0 |
float | 4 | 0.0 |
double | 8 | 0.0 |
char | 2 | ‘\u0000’ |
boolean | - | false |
注意:
- java中使用的是十六进制的UNICODE编码,该编码可以保存汉字。(每一个中文在java中都存在对应的unicode编码)
- double保存的数据长度最长。
- 大写字母的ASCII码范围:65 ~ 90 ;小写字母的ASCII码范围:97~122(大写字母+32转化为小写字母)
- java中不允许使用0或1来填充布尔型变量的内容,boolean的取值范围只能是true和false二选一
- byte可表示的数据范围是-128 ~ 127,char可表示的数据范围是0 ~ 255
那么我们在定义变量的时候具体该怎么选择数据类型呢?
- 想表示整数就使用int,表示小数就使用double
- 如果想表示日期时间数字或表示文件或内存大小就用long
- 如果要实现内容传递(IO操作,网络编程)或者是编码转换就使用byte
- 实现逻辑控制使用boolean
- 如果要处理中文就是用char,char可以避免乱码问题
方法的重载
方法的名称相同,参数的类型或个数不同,调用的时候会按照传递的参数类型和个数完成不同方法体的执行。
建议:所有重载后的方法使用同一种返回值类型。
返回值类型对方法的重载没有大的影响作用,方法重载的重点是根据参数类型及个数来区分不同的方法而不是依靠返回值的不同来确定的。
那么如果编写两个参数类型和个数完全一样但是返回值类型不同的方法,调用的时候會调用哪一个呢?
在主类中定义兵器人由主方法可以直接调用的方法必须加上static。
实例化对象的时候堆内存和栈内存的作用
堆内存:保存对象的真正数据,即对象的属性内容。
栈内存:保存的是一块堆内存的空间地址,为了方便理解,可以将栈内存中保存的数据理解为对象的名称。
如:
Book bk = new Book(“java宝典”,90);
那么就可以说bk是对象的引用,保存在栈内存中。堆内存中保存的是属性内容"java宝典",90。
new表示开辟堆内存空间。
使用了没有进行实例化的对象会出现空指针异常。
引用传递(重点)
一个堆内存空间可以同时被多个栈内存共同指向(引用数据类型都可以使用引用传递)
public class TestBook {
public static void main(String[] args) {
Book bk1 = new Book("java开发",38.5);
Book bk2 =null;
bk2 = bk1;
System.out.println(bk2 == bk1); //true
}
}
引用传递可以这么理解:因为对象的引用保存在栈内存中,如果别的对象指向该对象那么相当于将该对象的引用所指向的堆内存空间传递给了指向该对象的引用。如下图这么理解更为清晰一点:
封装
为什么要封装?
没有封装的类对象在访问属性的时候可以直接通过对象.属性进行赋值操作,没有进行检验所赋值是否合理,就直接将值赋给了属性,这样肯定不可避免很多错误。
标准做法:
所有在类中定义的属性都要求使用private进行封装,将类中的属性进行私有化的操作。然后在类中定义getter和setter方法。
setter方法主要是设置内容,可以在setter方法中对所赋值进行合理化的检验。getter属性是取得属性的内容。
构造方法
方法名称和类名称相同,没有返回值类型声明,可以进行重载)
在Java中,即使用户没有定义构造方法,也会在程序编译之后自动为类增加一个无参的构造方法。
在进行对象实例化操作的时候,就调用构造方法。
如:
Book bk = new Book();(黄色字体部分调用了无参的构造方法,可以不用定义)
public Book() {
}
Book bk = new Book(“java开发”,38.5);(黄色字体部分调用了有参的构造方法,该构造方法必须用户自己定义,否则该语句会报错)
public Book(String name, double price) {
this.name = name;
this.price = price;
}
构造方法与普通方法的区别:
- 构造方法是在实例化新对象(new)的时候只调用一次。
- 普通方法是在实例化对象之后,通过对象.方法调用多次。
- 程序的编译是根据定义结构来解析的,构造方法没有返回值类型声明,普通方法有返回值类型声明。
类中结构的编写顺序: - 编写属性,要将属性进行封装并提供getter和setter方法。
- 再编写构造方法,如果在一个类中对构造方法重载时,所有的重载方法按照参数的个数由多到少或由少到多进行编写是规范的。
- 最后编写普通方法。
匿名对象
没有栈内存指向的堆内存空间就是一个匿名对象。
由于匿名对象没有栈内存指向,只能使用一次,使用一次之后就成为垃圾,等待被GC回收释放。(一块没有任何栈内存指向的堆内存空间将成为垃圾,所有垃圾会不定期的被GC回收,回收后会被释放掉其所占用的空间)
数组
定义(一维数组):
数组的动态初始化:先开辟数组空间,然后为数组中的元素赋值。
数据类型 [] 数组名称 = new 数据类型[元素个数];
数组的静态初始化:数组定义的同时进行赋值。
数据类型 [] 数组名称 = new 数据类型[]{值,值,…}
数组的长度不能被改变。
常用的Java.util.Arrays中的方法
binarySearch使用二分搜索法来搜索指定数据类型数组,以获得指定的值。
public static int binarySearch(数据类型[] a,
int fromIndex,
int toIndex,
数据类型 key)
使用二分搜索法来搜索指定的数据类型数组的范围,以获得指定的值。必
须在进行此调用之前对范围进行排序。如果没有对范围进行排序,则结果
是不确定的。如果范围包含多个带有指定值的元素,则无法保证找到的是
哪一个。此方法认为所有 NaN 值都是等效且相等的。
参数:
a - 要搜索的数组
fromIndex - 要搜索的第一个元素的索引(包括)
toIndex - 要搜索的最后一个元素的索引(不包括)
key - 要搜索的值
返回:
如果它包含在数组的指定范围内,则返回搜索键的索引;否则返回 (-(插
入点) - 1)。 插入点 被定义为将键插入数组的那一点:即范围中第一
个大于此键的元素索引,如果范围中的所有元素都小于指定的键,则为
toIndex。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
IllegalArgumentException - 如果 fromIndex > toIndex
ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length
public static int binarySearch(数据类型[] a,
数据类型 key)
使用二分搜索法来搜索指定的数据类型的数组,以获得指定的值。必须
在进行此调用之前对数组进行排序(通过 sort(数据类型[]) 方法)。
如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指
定值的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) -
1)。 插入点 被定义为将键插入数组的那一点:即第一个大于此键
的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。
注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
copyOf复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
public static 数据类型[] copyOf(数据类型[] original,
int newLength)
复制指定的数组,截取或用 指定类型的默认值 填充(如有必要),以使
副本具有指定的长度。对于在原数组和副本中都有效的所有索引,这两个
数组将包含相同的值。对于在副本中有效而在原数组无效的所有索引,副
本将包含0(指定类型0的表示形式)。当且仅当指定长度大于原数组的长度
时,这些索引存在。
参数:
original - 要复制的数组
newLength - 要返回的副本的长度
返回:
原数组的副本,截取或用 指定类型的默认值 填充以获得指定的长度
抛出:
NegativeArraySizeException - 如果 newLength 为负
NullPointerException - 如果 original 为 null
copyRangeOf将指定数组的指定范围复制到一个新数组。
public static 数据类型[] copyOfRange(数据类型[] original,
int from,
int to)
将指定数组的指定范围复制到一个新数组。该范围的初始索引 ( from)
必须位于 0 和 original.length(包括)之间。 original[from]
处的值放入副本的初始元素中(除非 from == original.length 或
from == to)。原数组中后续元素的值放入副本的后续元素。该范围的
最后索引 ( to) (必须大于等于 from)可以大于
original.length,在这种情况下, 0(只当数据类型的默认值) 被放入索引大于等于
original.length - from 的副本的所有元素中。返回数组的长度为
to - from。
参数:
original - 将要从其复制一个范围的数组
from - 要复制的范围的初始索引(包括)
to - 要复制的范围的最后索引(不包括)。(此索引可能位于数组范围
之外)。
返回:
包含取自原数组指定范围的新数组,截取或用 指定类型的默认值 元素填
充以获得所需长度
抛出:
ArrayIndexOutOfBoundsException - 如果 from < 0
或 from > original.length()
IllegalArgumentException - 如果 from > to
NullPointerException - 如果 original 为 null
equals 如果两个指定的 同类型数组彼此相等,则返回 true。
public static boolean equals(数据类型[] a,
数据类型[] a2)
如果两个指定的 同类型 数组彼此 相等,则返回 true。如果两个数组
包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则
认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同
的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则
认为它们是相等的。
(与 == 操作符不同,此方法认为 NaN 等于它本身)
参数:
a - 将测试其相等性的一个数组
a2 - 将测试其相等性的另一个数组
返回:
如果两个数组相等,则返回 true
fill将指定的 数据类型的值分配给指定 数据类型数组(指定范围中的)的每个元素。
public static void fill(数据类型[] a,
数据类型 val)
将指定的 数据类型 值分配给指定 数据类型 数组的每个元素。
参数:
a - 要填充的数组
val - 要存储在数组所有元素中的值
public static void fill(数据类型[] a,
int fromIndex,
int toIndex,
数据类型 val)
将指定的 var 值分配给指定 数据类型 数组指定范围中的每个元素。填
充的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。
(如果 fromIndex==toIndex,则填充范围为空。)
参数:
a - 要填充的数组
fromIndex - 要使用指定值填充的第一个元素的索引(包括)
toIndex - 要使用指定值填充的最后一个元素的索引(不包括)
val - 要存储在数组所有元素中的值
抛出:
IllegalArgumentException - 如果 fromIndex > toIndex
ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length
hashCode基于指定数组的内容返回哈希码。
public static int hashCode(数据类型[] a)
基于指定数组的内容返回哈希码。对于任何两个满足
Arrays.equals(a, b) 的 数据类型 型数组 a 和 b,也可用说
Arrays.hashCode(a) == Arrays.hashCode(b)。
此方法返回的值与在 List 上调用 hashCode 方法获得的值相同,该
List 包含以相同顺序表示 a 数组元素的 Byte 实例的序列。如果 a
为 null,则此方法返回 0。
参数:
a - 要计算其哈希值的数组
返回:
a 数组基于内容的哈希码
sort 对指定的 数据类型 型数组(的指定范围)按数字升序进行排序。
public static void sort(数据类型[] a)
对指定的 long 型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法。
参数:
a - 要排序的数组
public static void sort(数据类型[] a,
int fromIndex,
int toIndex)
对指定 int 型数组的指定范围按数字升序进行排序。排序的范围从索引
fromIndex(包括)一直到索引 toIndex(不包括)。(如果
fromIndex==toIndex,则排序范围为空。)
该排序算法是一个经过调优的快速排序法。
参数:
a - 要排序的数组
fromIndex - 要排序的第一个元素的索引(包括)
toIndex - 要排序的最后一个元素的索引(不包括)
抛出:
IllegalArgumentException - 如果 fromIndex > toIndex
ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length
toString返回指定数组内容的字符串表示形式。
public static String toString(数据类型[] a)
返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表
组成,括在方括号( "[]")中。相邻元素用字符 ", "(逗号加空格)
分隔。这些元素通过 String.valueOf(数据类型) 转换为字符串。如果 a
为 null,则返回 "null"。
参数:
a - 返回其字符串表示形式的数组
返回:
a 的字符串表示形式