目录
小知识点
在一个源文件中只能有一个public修饰的类,并且源文件的名字必须与public修饰的类名字相同
JDK包含JRE和JVM
Java 的字符类型采用 Unicode 编码方案,每个 Unicode 码占用 16 个比特位
每个 Unicode码占用2个字节,每个字节是8个比特位
标识符中可以包含:字母、数字以及 下划线和 $ 符号等等
注意:标识符不能以数字开头,也不能是关键字,且严格区分大小写
类名:每个单词的首字母大写(大驼峰)
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)
变量名:与方法名规则相同
数据类型与变量
基本数据类型:
整型:字节类型byte(-128--127)、short(包装类型:short)、int(包装类型:Integer)、long(包装类型:long) 对应1、2 、4、 8 个字节 1字节等于8bit位
小数:float、double 对应4、8 个字节
字符:char(包装类型:Character)对应2个字节
布尔:boolean
引用数据类型:
String、数组、类、接口
public class Main{
public static void main(String[] args){
String str1="345";
int value=Integer.valueOf(str1);//可以将字符串里面的内容变整数
int value2=Integer.parseInt (str1);
System.out.println(value);
int a=100;
String str=String.valueOf(a);//可以将整数内容变字符串
System.out.println(str);
}
}
Integer 类的主要功能是提供了一种包装 int 类型的方式,包括类型转换、字符串转换、常量定义等
valueOf 是 Integer 类的一个静态方法,用于将其他数据类型(如字符串)或基本数据类型转换为 Integer 对象
实际开发中,通常使用 valueOf 方法来进行装箱操作,将基本数据类型转换为对应的包装类对象
valueOf 和praseint的区别:
返回类型:valueOf 返回 Integer 对象、parseInt 返回基本数据类型 int
运算符计算
算一算以下的表达式,看看你都会吗
public class Main{
public static void main(String[] args){
System.out.println(5/2);//2
System.out.println((float) 5/2);//2.5
System.out.println(5/(float)2);//2.5
System.out.println((float) (5/2));//2.0
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//-1
//碰到负数除或者余最后的符号取决与第一个数
int a=4;
double b=5.0;
a+=b;
System.out.println(a);
}
}
复合赋值运算符
+=自动进行转换,/=、*=都一样
>>>无符号右移,向右移左边补0
方法
fill:
int[] array = new int[10];
Arrays.fill(array,9);
这个方法叫填充,可以把数组的值按你指定的数字进行填充
int[] array = new int[10];
Arrays.fill(array,0,3,9);
还可以指定区间进行填充,这个就在[0,3)区间填充9,顺便提一下java的区间一般都是左闭右开
equals:
equals属于String中的一种方法,用来判断内容、长度相不相等,返回值是boolean类型
写方法的时候根据返回类型要不要写return
记住方法有返回值的时候主方法要记得接收,然后输出
方法必须在类中,方法不能嵌套定义
创建方法时会开辟一个方法栈帧,创建变量时会在那个方法的栈帧里在开辟一块内存
方法调用需要开辟内存,方法调用结束后这块内存就销毁了
主方法中的参数是实参,负责把参数传递给方法的形参,所以方法中的参数就是形参
例子:
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);//实参
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {形参
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
方法的重载
注意:
1. 方法名必须相同
2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)满足其一即可
3. 返回值不影响重载(不作为判断重载的条件)
递归
递归:
要有结束条件、将原问题划分成其子问题
注意:子问题必须要与原问题的解法相同
想到它的公式就很简单了
数组
数组是引用类型
是一块连续的内存,用来存储相同类型的数据
如果希望返回一个int的数组,方法返回类型写int[]
还能这样写return new int[]{i,j};创建了一个匿名的整数数组,该数组包含两个元素,分别是 i 和 j。整个数组被视为一个对象
int[] array = {1,2,3,4}; 数组类型+数组名
int[] array = new int[]{1234}; new一般用来实例化对象,实例化了一个整型类型的数组,这里数组是一个对象
int[] array1 = new int[10]; 创建一个可以容纳10个int类型元素的数组,默认将数组初始化为0
int n = 10;
int[] array = new int[n]; 还可以创建一个变量,决定数组的长度
int[] array1;
array1 = new int[10];还可以这样写
int[] array = null; 变量array中存的是地址,这个变量叫引用变量或者直接叫引用
注意:数组整体进行赋值的时候只有一次机会,就是在定义的时候,还有boolean类型默认false
引用变量并不直接存储对象本身,简单理解成存储的是对象在堆中的起始地址。通过该地址,引用变量便可以去操作对象
获取数组长度:
int length = array.length; 数组名.length
阵列循环也叫增强for循环也叫for-each:
for (int x : array) 类型 变量名自己取:数组名
遍历这个数组的同时把数组中的元素进行赋值给这个x
数组转字符串以及排序:toString() 方法通常用于返回对象转换为可读的字符串
String ret = Arrays.toString(array);
System.out.println(Arrays.toString(array));
排序:
Arrays.sort(array);
System.out.println(Arrays.toString(array));
数组的拷贝:创建一个指定长度的新数组,并将原始数组的元素复制到新数组中,这里表示拷贝的是array 一样的长度
int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(array, array.length);//cope返回值是数组类型
这里表示拷贝array 长度的两倍
int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(array, array.length*2);//cope返回值是数组类型
这里表示拷贝array数组[0,3)范围
int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(array, 0, 3);
二维数组
二维数组就是特殊的一维数组!!!好好理解一下,下面有例子
定义:
int[][] array = new int[1][2];
int[][] array1 = new int[][]{{1, 2, 3}, {5, 6, 7}};
打印:
int[][] array1 = new int[][]{{1, 2, 3}, {5, 6, 7}};
System.out.println(Arrays.deepToString(array1));
阵列打印二维数组:
int[][] array1 = new int[][]{{1, 2, 3}, {5, 6, 7}};
for (int[] temp : array1) {
for (int x : temp){
System.out.print(x+" ");
}
System.out.println();
}
二维数组就是特殊的一维数组:
int[][] array1 = new int[][]{{1, 2, 3}, {5, 6, 7}};
System.out.println(array1[0]);//打印出来的是地址
System.out.println(array1[1]);
上下结合想想
int[][] array1 = new int[][]{{1, 2, 3}, {5, 6, 7}};
System.out.println(array1.length);//打印的是二维数组的长度
System.out.println(array1[0].length);//打印的是二维数组中一维数组的长度
System.out.println(array1[1].length);
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {//array1[i].length中的i相当于二维数组每一个元素的长度
System.out.print(array1[i][j]);
}
System.out.println();
}
JVM
JVM内存分为java虚拟机栈、java本地方法栈、堆、方法区、程序计算器
程序计数器:保存下一条执行的指令的地址
java虚拟机栈:与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧
堆:用 new 创建的对象都是在堆上保存,堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销
毁。
方法区: 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数
据
本地方法栈: 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量
Null
null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.
表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException.
总结:
以上便是java的基础知识点,内容还是挺多的,慢慢看,慢慢消化,慢慢理解。