Java学习笔记 第二章 Java语言基础
第二章 JAVA语言基础
一、关键字
1、关键字的定义和特点
定义:被Java语言赋予了特殊含义的单词
特点:关键字中所有的字母都为小写
2、用于定义数据类型的关键字
c;ass interface byte short int long float double char boolean void
3、用于定义数据类型值的关键字
true false null
4、用于定义流程控制的关键字
if else switch case default while do for break continue return
5、用于定义访问权限修饰符的关键字
private protected public
6、用于定义类,函数,变量修饰符的关键字
abstract final static synchronized
7、用于定义类与类之间的关键字
extends implements
8、用于定义实例及引用实例,判断实例的关键字
new this super instanceof
9、用于异常处理的关键字
try catch finally throw
10、用于包的关键字
package import
11、其他修饰符关键字
native strictfp transient volatile assert
二、标识符
在程序中自定义的一些名称
由26个英文字母大小写,数字,下划线_,美元符$组成
定义合法标识符规则:
1、数字不可以开头
2、不可以使用关键字
Java严格区分大小写
三、注释和转义
用于注解说明程序中的文字
// 单行注释
/**/ 多行注释
\n:回车符
\t:制表符
\b:退格
\r:换行符
对于windows系统的换行为\n\r,linux系统为\n
四、常量和变量
1、常量
常量表示不能改变的数值
常量的分类:
1、整数常量,所有整数
2、小数常量,所有小数
3、布尔型常量,true 和 false
4、字符常量,将一个数字字母或者符号用单引号(’’)标识
5、字符串常量,将一个或多个字符用双引号(””)标识
6、null常量,只有一个数值null
对于整数常量,有四种形式
二进制:0-1,满二进一
八进制:0-7,满八进一,用0开头表示
十进制:0-9,满十进一
十六进制:0-9,A-F,满十六进一,用0x开头表示
2、变量
变量的概念:
内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化
为什么要定义变量:
用来不断的存放同一类型的常量,并可以重复使用
使用变量注意:
变量的作用范围(一对{}之间有效)
初始化值
定义变量的格式:
数据类型 变量名=初始化值
3、数据类型
Java语言是强类型,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
基本数据类型
数值类型
整数类型 byte,short,int,long
浮点类型 float,double
字符类型 char
布尔型 boolean
引用数据类型
类 class
接口 interface
数组 []
4、类型转换
自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显示类型转换)
类型转换的原理
表达式的数据类型自动提升
所有的byte型,short型,char的值将被提升到int型
如果一个操作数是long型,计算结果是long型
如果一个操作数是float型,计算结果是float型
如果一个操作数是double型,计算机结果是double型
Interger.MAX_VALUE //获取数据类型的最大值
五、运算符
算术运算符 +、-、*、/、%
赋值运算符 =、+=、-=、*=、/=、%= (+=等操作自动会在底层做类型转换后赋值)
比较运算符 >、<、==、!=、>=、<=、instanceog
逻辑运算符 &、|、^、&&、||、! (&&与&的区别在于&&当一边不成立时结束逻辑)
位运算符 <<、>>、>>>、&、|、^、~
三元运算符 (条件表达式)?表达式1:表达式2;
六、程序流程控制
1、判断结构
if(条件表达式) { 执行语句; }else if (条件表达式) { 执行语句; }else{ 执行语句; }
2、选择结构
switch(条件) { case 取值1: 执行语句; break; case 取值2: 执行语句; break; default: 执行语句; }
3、循环结构
初始化表达式; while(条件表达式) { 执行语句;(循环体) 循环操作表达式; } 初始化表达式; do{ 执行语句;(循环体) 循环操作表达式; }while(条件表达式); for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句;(循环体) }
//与while循环的区别,for循环初始化表达式循环结束后自动从内存消除
4、流程控制语句
break:跳出当前循环 continue:跳出本次循环
七、函数
1、函数的定义
函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。
2、函数的格式
修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2) { 执行语句; return 返回值; }
3、函数的特点
定义函数可以将功能代码进行封装,便于对该功能进行复用
函数只有被调用才会被执行,提高代码的复用性
对函数没有具体返回值的情况,返回类型用关键字void表示
函数中只能调用函数,不可以在函数内部定义函数
定义函数时,函数的结果应该反悔给调用者,交由调用者处理
4、函数的重载(overload)
概念:在同一个类中,允许存在一个以上同名函数,只要他们的参数个数或参数类型不同即可。
特点:与返回值类型无关,只看参数列表
好处:方便了阅读,优化了程序设计
八、内存
1、寄存器
存储指令、数据和位址,控制部件中包含指令寄存器(IR)和程序计数器(PC),算术及逻辑部件包含累加器(ACC)
2、本地方法区
3、方法区
4、栈内存
存储局部变量, 变量在所属作用域结束,立即被释放
5、堆内存
存储数组和对象(其实数组就是对象),凡是new建立在堆中
特点:
1、每个尸体都有首地址值
2、堆内存中的每一个键都有默认初始化值,根据类型的不同而不同
3、垃圾回收机制
九、数组
1、数组的概念
同一种类型数据的集合,数组就是个容器。
2、数组的好处
可以自动给数组的元素从0开始编号,方便操作这些元素
3、数组的格式
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
示例:int[] arr=new int[5]
格式2:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
示例:int[] arr=new int[]{3,4,5,6}
4、数组的遍历
使用for循环遍历 for(int x=0;x<arr.length;x++) { System.out.println(“arr[“+x+”] = ”+arr[x]+”;”); } 使用foreach遍历
5、数组的常用算法
import java.util.*; Arrays.sort(arr); //数组排序 Arrays.binarySearch(arr,5); //数组查找 Integet.toBinaryString(60); //十进制转二进制 Integet.toOctalString(60); //十进制转八进制 Integet.toHexString(60); //十进制转十六进制
1、获取数组中的最大值
public static int getMax(int[] arr) { if(arr.length<1){ return 0; } int max=arr[0]; int len = arr.length; for(int x=1;x< len;x++) { if(arr[x]>max) { max = arr[x]; } } return max; }
2、选择排序
public static int[] selectsord(int[] arr) { int len = arr.length; for(int x=0;x<len-1;x++) { for(int y=x+1;y<len;y++){ if(arr[x]>arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } return arr; }
选择排序优化版
public static int[] selectsord(int[] arr) { int len = arr.length; for(int x=0;x<len-1;x++) { int num=arr[x]; int index=x; for(int y=x+1;y<len;y++){ if(num>arr[y]) { num = arr[y]; index = y; } } if(num != arr[x]){ int temp = arr[x]; arr[x] = num; arr[index] = temp; } } return arr; }
3、冒泡排序
public static int[] bubblesort(int[] arr) { int len = arr.length; for(int x=0;x<len-1;x++) { for(int y=0;y<len-1-x;y++){ if(arr[y]>arr[y+1]) { int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } return arr; }
4、普通查找
public static int getIndex(int[] arr,int value) { int len=arr.length; for(int x=0;x<len;x++) { if(arr[x] == value){ return x; } } return -1; }
5、二分法查找
public static int halfSearch(int[] arr,int value) { int min,mid,max; min = 0; max = arr.length-1; while(min <= max) { mid = (min+max)/2; if(arr[mid] < value) min = mid+1; else if(arr[mid] > value) max = mid -1; else return mid; } return -1; }
6、进制转换
public static void scale(int num,int scale) { if(num == 0) { System.out.print(0); return ; } char[] cls = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char[] arr = new char[32]; int pos =arr.length; int k=1,j=0; while(k < scale) { k *= 2; j++; } while(num != 0) { int temp = num & (scale-1); arr[--pos] = cls [temp]; num = num >>> j; } for(int a=pos;a<arr.length;a++) { System.out.print(arr[a]); } }
十、二维数组
1、特点
数组中的数组
2、格式
格式1:int[][] arr= new int[3][2];
格式2:int[][] arr= new int[3][];
格式3:int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};