Java基础知识总结一:

Java基础知识总结一:

关键字和保留字

在这里插入图片描述
*Java保留字:现有Java版本尚未使用,但以后的版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字
goto,const
*.中英文标点符号的区别:
1.汉语中的某些标点符号为英语所没有。 顿号(、)书名号(《》)间隔号(??)着重号
2.英语中的某些标点符号为汉语所没有。撇号–Apostrophe('连字号–Hyphen(-)斜线号—Virgule or Slash(/):该符号主要起分割作用,也常用于标音。
3.某些符号在汉英两种语言中的形式不同。 中文的句号是空心圈(。);英文的句号是实心点(.)。 英文的省略号是三个点(…),位置在行底;中文的为六个点(…),居于行中。英文的破折号是(-);中文的是(–)

标识符

*.标识符:

Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符
注:凡是自己可以起名字的地方都叫标识符(比如:类名,变量名,方法名,接口名,包名…)
*标识符定义规则:不遵守-编译不通过
在这里插入图片描述
*Java中的命名规范—不遵守-编译运行都可以通过
①包名:多单词组成时所有字母都小写:xxxyyyzzz
②类名,接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
③变量名,方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
④常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ

变量

*.变量的使用
java定义变量格式:数据类型 变量名 =变量值
说明:
*.变量必须先声明后使用
*.变量都定义再其作用域(大括号的区域)内,在作用域内,它是有效的,换句话说,出了作用域,就失效了
*.同一个作用域内,不可以声明两个同名的变量
变量的分类:
*.按数据类型分为基本数据类型和引用数据类型
在这里插入图片描述
*.按声明位置的不同分为成员变量和局部变量
在这里插入图片描述
一,整数类型
在这里插入图片描述

*.整型:byte(1字节=8bit)short(2字节)int(4字节)long(8字节)
*.byte范围:-128-127
*.声明long型变量,必须以“l”或“L”结尾(若不写,系统默认为int型)
*.通常,定义整型变量时,使用int型
二,浮点类型
在这里插入图片描述
*. Java常用的浮点型常量默认为double型,声明float型常量,须后必须加“f”或“F”
*.浮点型:float(4字节)double(8字节)
*.浮点型,表示带小数点的数值
*.float表示的数值的范围比long还大
*.定义时加上“f”或“F”,最后输出时不带
*.若用float或double输出的是整数时,最后输出结果系统自动补“.0”
三,字符类型:
*.字符型:char(1字符=两字节)
*.定义char型变量,通常使用一对’’,内部只能写一个字符
*.在char中’‘将转义字符转变为普通的常量,如‘\n’没有换行含义
*.也可以不加’’,直接用ASCCII码表示,即char c1='a’与char c1=91一样

*.‘\t’为制表符(相当于两个字符中间tap)
四,布尔型
*.布尔型:Boolean
只能取两个值之一:true,false

运算符

算术运算符:
在这里插入图片描述

赋值运算符
在这里插入图片描述
注意:赋值运算符也不会改变变量本身的数据类型(跟自增自减类似)
比如:short s1=10;
s1=s1+1;//会报编译错误(1为int型,容量比short大)
s1+=1//编译正确

*.开发中如果希望变量实现+1的操作:
方式一:num = num + 1;
方式二:num += 1;
方式三:num++;(推荐)
比较运算符:(关系运算符)
在这里插入图片描述
*.比较运算的结果都是boolean类型,也就是要么false要么true
*.比较运算符“”不能误写成赋值运算符“=”
*.除
和!=外其他的只能在数值类型数据之间使用
*.==和!=还可以使用在其他引用数据类型
逻辑运算符
在这里插入图片描述
&-逻辑与 |-逻辑或 !-逻辑非
&&-短路与 ||-短路或 ^-l逻辑异或
*.逻辑运算符操作的都是boolean类型的变量
*.区别&与&&:
相同点:1,&与&&运算结果相同
2,当符号左边是true时,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算
位运算符
位运算是直接对整数的二进制运算
*.左移缺位补零(无论正负)
.右移缺位负数补一,整数补零
注意:
1,位运算符操作的都是整型的数据
2,“<<”,在一定范围内,每向左移一位,相当于
2
“>>”,在一定范围内,每向右移一位,相当于/2
注:都是基于二进制的运算

流程控制

条件语句:
if-else语句
在这里插入图片描述

在这里插入图片描述
说明:1,else结构是可选的
2,针对于条件表达式:
> 如果多个条件表达式之间是“互斥关系”(或没有交集的关系)哪个判断和执行语句声明在上面还是下面,无所谓
>如果多个条件表达式之间有交集的关系,需根据实际情况,考虑清楚应该将哪个结构声明放在上面

      switch-case

在这里插入图片描述

说明:1,根据switch表达式中的值,一次匹配各个case中的常量,一旦匹配成功,则进入相应的case结构中,调用其执行语句,当调用完成以后,则仍然继续向下执行其他case结构中的执行语句,直遇到break关键字或此switch-case一直到末尾结束为止
2,switch结构的表达句中,只能是如下六种数据类型之一:byte,short,char,int,枚举类型,String类型
3,case之后只能声明常量,不能声明范围
4,break关键字是可选的
5,default:相当于if-else中的else
6,default 位置还可选的,而且位置是灵活的

7,如果switch-case结构中的多个case的执行语句相同,则可以考虑合

8,凡是可以使用switch-case的结构,都可以转换为if-else,反之,不成立
9,我们写分支结构时,当我们发现既可以使用switch-case,(同时又switch中表达式取值情况不太多)又可以使用if-else时,我们优先使用switch-case

循环语句:
在这里插入图片描述
在这里插入图片描述
for循环
1,初始化条件 2,循环条件(只能是boolean类型的) 3,循环体 4,迭代条件
注意:通常条件下,循环结束是因为2中的循环条件返回false了
for (1,2,4){
3
} 循环执行过程 1 - 2 - 3 - 4 -2 - 3 - 4 - … -2(1只执行一次,只是一个初始化的过程)

while 循环
*.循环结构的四个要素:
①初始化条件 ②循环条件(boolean类型) ③循环体 ④迭代条件
*.while循环的结构:
①;
while(②){
③;
④;
}
*.执行过程:①–②--③–④--②–③--④…②
*.注意:1,写while循环时千万小心不要丢了迭代条件,一旦丢了,就可能导致死循环;
2,我们写程序时要避免死循环(算法:有限性)
3,for循环和while循环是可以相互转换的(区别:for循环和while循环的初始化条件部分作用范围不同)

嵌套循环

使用:
1,将一个循环体结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

2,
外层循环:循环结构B
外层循环:循环结构A
3,内层循环结构遍历一次,只相当于外层循环体执行了一次
4,假设外层循环需要执行m次,内层循环需要执行n次,此时内存循环体一共执行了m*n次
5,技巧:外层循环控制行数,内层循环控制列数

do-while循环
do-while循环的结构:
①;
do{
③;
④;

} (②);

*.执行过程:①–③--④–②--③–④…②
注意:
1,do-while循环至少会执行一次循环
2,开发中,使用for和while多一些,较少使用do-while
说明:
1, 不在循环条件1部分限制次数的结构:for(;;;)或while(true)
2,结束循环的方式有几种?
方式一:循环条件部分返回false
方式二:在循环体中,执行break

数组

一维数组

数组的概述:
数组(Array)是多个相同数据类型按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理
2,数组相关概念:
1,数组名 2,元素 3,角标,下标,索引 4,数组的长度,元素的个数
3,数组的特点:
①数组是有序排列的
②创建数组对象会在内存中开辟一整块连续空间
③数组长度一旦确定,就不能更改
④数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型
4,数组分类:
①按照维数:一维数组,二维数组,,,,多维
②按照数组元素类型:基本数据类型的数组和引用数据类型的数组
5,引用数据类型(类,接口,数组)的变量初始化值不是null就是地址值
6,一维数组的使用
①一维数组的声明和初始化:
int [] ids;//声明
//静态初始化
ids = new int [] {1001,1002,1003,1004};
//动态初始化
String[] names = new String[5];
int[] arr4 = {1,2,3,4};//也是正确的初始化过程

 ②如何调用数组的指定位置元素:

//如何调用数组的指定位置元素:通过角标方式调用
//数组的角标(或索引)从0开始时,到数组的长度-1结束
name[0] = “王明”;
name[1] = “王贺”;
name[2] = “张学良”;
name[3] = “孙屠龙”;
name[4] = “王宏志”;

 ③如何获取数组长度:

//如何获取数组长度
//属性:length
System.out.println(names.length);

 ④如何遍历数组:

//遍历数组
for(int i=0;i < names.length;i++) {
System.out.println(names[i]);
}

 ⑤数组元素的默认初始化值

数组元素是整型:0;
数组元素是浮点型:0.0
数组元素是char型:0或’\u00’,而非’0’
数组元素是boolean型:false
数组元素是引用数据类型:null

 ⑥数组的内存解析

二维数组

一个一维数组的元素还是一维数组,则称其为二维数组
*.注意二维数组外层调用的值不是null就是地址值
*.引用数据类型的变量就两种值,地址值和null(如:String)
*.二位数组的使用:
①一维数组的声明和初始化:
静态初始化
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
动态初始化1,
Sring[][] arr1 = new String[3][2];
动态初始化2,
Sring[][] arr2 = new String[3][];// 当以二维数组元素来看,里面一维数组长度不一样时使用
动态初始化3,
int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};

 ②如何调用数组的指定位置元素:
          静态初始化中的:
           int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
           System.out.println(arr[0][1]);//2
              动态初始化1:
           Sring[][] arr1 = new String[3][2]; 
           System.out.println(arr1[1][1]); //null
              动态初始化2:
           Sring[][] arr2 = new String[3][];
           arr2[1] = new String[4];
           System.out.println(arr2[1][0]);

 ③如何获取数组长度:

int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//2

 ④如何遍历数组

for(i = 0;i < arr4.length;i++){
for(int j = 0;j < arr4.length;j++){
System.out.println(arr4[i][j]);
}

       }

 ⑤数组元素的默认初始化值
 规定:二维数组分为外层数组元素,内层数组元素
  int[][] arr = new int[4][3];
  外层元素:arr[0],arr[1等
  内层元素:arr[0],arr[1][2]等

*.数组元素的默认初始化值
针对于初始化方式一: int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同

针对于初始化方式二:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错

 ⑥数组的内存解析

数组中涉及的常见算法

*.数组中元素的最大值,最小值,平均数:
代码:
package com.mistart.java2;

public class ArrayTest2 {
public static void main(String[] args) {
int num[] = new int[10];
//int maxScore=0;
int sum=0;
int averageNum=0;
for (int i=0;i<num.length;i++) {
num[i] =(int)(Math.random()*90+10);
}
int minScore = num[0];
int maxScore = num[0];
//遍历此数组
for (int i=0;i<num.length;i++) {
System.out.print(num[i]);
System.out.println("\t");
//元素最大值
if (maxScore < num[i]) {
maxScore = num[i];
}
//元素最小值
if (minScore > num[i]) {
minScore = num[i];
}
sum+=num[i];
averageNum=sum/10;

	}
	System.out.println("最大值为:" + maxScore);
	System.out.println("最小值为:" + minScore);
	System.out.println("和值为:" + sum);
	System.out.println("平均值为:" + averageNum);

	
	
}

}

*.数组的复制,反转,查找:

代码:

package com.mistart.java2;

public class ArrayTest3 {
public static void main(String[] args) {
int array1[] = new int[] {2,3,5,7,11,13,17,19};
int array2[];
for (int i=0;i<array1.length;i++) {
System.out.print(array1[i]);
System.out.print("\t");
}
//array2 = array1;
//数组的复制
array2 = new int[array1.length];
for (int i=0;i<array2.length;i++) {
array2[i] = array1[i];
}
for (int i=0;i<array2.length;i++) {
if(i%2==0) {
array2[i]=i;
}

   }
	System.out.println();
	for(int i=0;i<array1.length;i++) {
		System.out.print(array1[i]);
		System.out.print("\t");
	}
	
	
	
}

}

*.反转和查找(现性查找)
代码:

package com.mistart.java2;

public class ArrayTest4 {
public static void main(String[] args) {
String[] arr = new String[] {“JJ”,“DD”,“MM”,“BB”,“GG”,“AA”};
//数组的反转方法一
//for (int i=0;i<arr.length/2;i++) {
//String temp = arr[i];
//arr[i] = arr[arr.length-i-1];
//arr[arr.length-i-1] = temp;
//}
//方法二
for (int i=0, j=arr.length-1;i<j;i++,j–) {
String temp=arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"\t");
}
//查找
//线性查找
String dest = “dd”;
boolean isFlag = true;
for (int i=0;i<arr.length;i++) {
if(dest.equals(arr[i])) {
System.out.println(“找到指定元素,位置为:” + i);
isFlag = false;
break;
}

		}
	System.out.println();
	if(isFlag) {
		System.out.println("很遗憾,没有找到");
	}

	
}

}

*.二分法查找:(所要查找的数据必须有序)

思路:(按从小到大排序)先设置首末索引,取中间索引值(整型,按左取),比较找的值与中间值的大小,相同,就是次中间值,如果找的值大于中间值,说明找的值在中间值右边,首索引就变为中间制值的下一位,即head=middle+1;若小于,说明在左边,末索引就变为中间值的前一位,即end=middle-1;

代码:

package com.mistart.java2;

public class ArrayTest5 {
public static void main(String[] args) {
int[] arr2 = new int[] {-98,-34,2,34,54,66,79,105,210,333};
int dest1=-34;
int head=0;//初始首索引
int end = arr2.length-1;//初始末索引
boolean isFlag=true;
while(head<=end) {
int middle = (head+end)/2;
if(dest1 ==arr2[middle]) {
System.out.println(“找到了指定元素,位置为:” + middle);
isFlag = false;
break;
}else if (arr2[middle] > dest1) {
end = middle - 1;
}else {
head = middle + 1;
}
}

}

}

*>冒泡排序:

代码:

package com.mistart.java2;

public class ArrayTest6 {
public static void main(String[] args) {
int[] arr = new int[] {43,32,76,-98,0,64,33,-21,32,99};
//表示比较的轮数
for(int i=0;i<arr.length-1;i++) {
//表示相邻的两个数(比较的次数)
for(int j =0;j<arr.length-1-i;j++) {
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}

	}
	for (int i=0;i<arr.length;i++) {
		System.out.println(arr[i]);
	}
	
}

}

数组中常见的异常及操作数组工具类

*.数组中常见的异常:
1,数组角标越界异常
合理范围:[o,arr.length-1]
越界:arr[-1],arr[arr.length-1]
在这里插入图片描述
循环结构中i<=arr.lrngth(写了等号)
2,空指针异常:
情况1:(给地址值赋值了空值)
int[] arr1 = new int[]{1,2,3};
arr1[] = null;
System.out.println(arr1[0]);
情况2:(给元素值赋了空值)
Sring[] arr2 = new String[]{“AA”,“BB”,“CC”};
arr2[0] = null;
System.out.println(arr2[0].toString());
情况3:
int[][] arr2 = new int[4][];
System.out.println(arr2[0][0]);
在这里插入图片描述
*.操作数的工具类:
在这里插入图片描述
1,boolean equals(int[]a,int[]b)
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEquals = Arrays.equals(arr1 ,arr2);//在数组中数是有顺序的,输出false
System.out.println(isEquals);
2,String toString(int[] a)
System.out.println(Arrays.toString(arr1));
3,void fill (int[] a,int val)
Arrays.fill(arrr1,10);
System.out.println(Arrays.toString(arr1));
4,void sort(int[] a)
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
5,int binarySerch(int[] a,int key)
int[] num = new int[]{12,34,56,67,881,212};
int index = Arrays.binarySerach(arr3,210);
System.out.println(index);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值