计算机语言和Java
计算机语言主要由一些指令(包括数字、符号和语法等)组成,可以分为机器语言、汇编语言、高级语言三大类。Java是一种高级计算机语言,是一种可以编写跨平台应用软件、完全面向对象的程序设计语言。
特点:简单,面向对象,安全(不支持指针,一切对内存的访问都必须通过对象的实例变量来实现),跨平台,支持多线程(程序中有多个任务可以并发执行)。
Java是如何运行的
程序源代码→编译器(JDK)→字节码→JVM(Java虚拟机(JRE))→机器码010010...→计算机
Java开发环境,简称JDK(Java Development Kit),它是整个Java的核心,其中包括Java编译器、Java运行工具、文档生成工具、Java打包工具等。
Java的运行环境,简称JRE(Java Runtime Environment)。现在JDK工具中自带了一个JRE。
定义标识符遵循的规则:①包名所有字母一律小写,例如cn.itcast.test②类名和接口名每个单词的首字母都要大写,例如ArrayList③常量名所有字母都大写,例如DAY_OF_MONTH④变量名和方法名的第一个单词首字母小写,之后的单词首字母大写,例如lineNumber、getNum⑤尽量使用有意义的单词来定义标识符,例如passWord表示密码,userName表示用户名。
Java中常量
①整型常量。二进制:0b或0B开头,0和1组成的数字序列,例如0b0110、0B1101。
八进制:0开头,0~7组成的数字序列,例如:0342。
十进制:0~9组成的数字序列。
十六进制:0x或0X开头,0~9、A~F组成的数字序列,例如0x25AF。
②浮点数常量。float单精度浮点数(32位)结尾F或f;double双精度浮点数(64位)结尾D或d,例如3.84e+20f(3.84*1020)
③字符常量。用单引号,例如 ‘a’ ‘1’ ‘\r’ ‘\u0000’(表示空白字符)。
④字符串常量。用双引号,例如 “HelloWorld”。
⑤bool常量。含两个值true和false。
⑥null常量。只有一个值null,表示对象的引用为空。
反斜杠(\),也称转义字符
\r 表示回车符,\n 表示换行符,\t 表示制表符,\b 表示退格符,就像键盘上的Backspace,\’ 表示单引号字符,\” 表示双引号字符,\\ 表示反斜杠字符。
注:在java控制台显示/r /n /r/n 这三个显示出来效果是一样的。
变量类型转换
自动类型转换也叫隐式类型转换,两种数据类型彼此兼容且目标类型的取值范围大于源类型的取值范围,例如
byte b = 3; int x = b;
强制类型转换也叫显式类型转换,两种数据类型彼此不兼容或目标类型的取值范围小于源类型的取值范围,例如
byte a; int b = 298; a = (byte)b;
【a++和++a】
int a = 1;
int b = a++;
System.out.println("a = " + a);
System.out.println("b = " + b);
运行结果
a = 2
b = 1
int a = 1;
int b = ++a;
System.out.println("a = " + a);
System.out.println("b = " + b);
运行结果
a = 2
b = 2
真值,原码,反码,补码
真值是带符号的二进制数,如-101表示-5;
原码用1代表负数,0代表正数,如真值-101的原码为10000101,因为第一位是符号位,所以8位二进制的取值范围是[11111111,01111111]。即[-127,127];
反码,正数的反码是其本身,负数的反码是在原码的基础上符号位不变,其余位取反,如真值-101=原码10000101=反码11111010;
补码,正数的补码是其本身,负数的补码是在原码的基础上符号位不变,其与各位取反,最后加1(总的来说就是反码+1),如真值-101=原码10000101=反码11111010=补码11111011
运算符
运算符^,异或,例如true^true结果为false,true^false结果为true。
运算符&&,短路与,从左往右,左侧为false时会直接输出false,右边表达式不会进行运算,例如false&&true结果为false,true&&false结果为false。
运算符&,与,两边表达式都会进行运算。
|(或)和||(短路或)用法类似于&和&&。
三目运算符 ?:
int a,b,c;
a = 5; b = 7;
c = a<b ? a : b;
System.out.println(c);
//输出5
位运算
按位与(&),参加运算的两个数转换成二进制后进行与运算,相应位上都为1时取1,否则取0。
按位或(|),参加运算的两个数转换成二进制后进行或运算,相应位上只要有1取1,都为0时取0。
按位异或(^),参加运算的两个数转换成二进制后进行异或运算,相应位上数字不同取1,相同取0。可以看出任何数与0异或都是其本身。利用异或还可以实现一个很好的交换算法,用于交换两个数:
a = a ^ b;
b = b ^ a;
a = a ^ b;
取反(~),参加运算的两个数转换成二进制后进行取反运算,每位取反,1变0,0变1。
左移(<<),参加运算的数转换成二进制后进行左移运算,左移若干位。可以发现左移n位后结果=原值*2n。
右移(>>),参加运算的数转换成二进制后进行右移运算,右移若干位。可以发现右移n位后结果=原值/2n,值要取整。
选择结构语句
if(判断条件){执行语句}
if(判断条件){执行语句}else{执行语句}
if(判断条件){执行语句}else if(判断条件){执行语句}...else if(判断条件){执行语句}else{执行语句}
switch(表达式){case 目标值1:执行语句1 break;case 目标值2:执行语句2 break;case 目标值n:执行语句n break;}
循环语句结构
while(循环条件){执行语句} //先判断,后执行
do{执行语句}while(循环条件); //先执行,后判断
for(初始化表达式;循环条件;操作表达式){执行语句}
注:break,主要用在循环语句或者switch语句中,用来跳出整个语句块;continue,适用于任何循环控制结构中,是让程序立刻跳转到下一次循环的迭代。
public class Test{
public static void main(String[] args) {
int[] n = {1,2,3,4,5};
for (int x : n){
if(x == 3){
break;
}
System.out.println(x);
}
}
}
运行结果:
1
2
public class Test{
public static void main(String[] args) {
int[] n = {1,2,3,4,5};
for (int x : n){
if(x == 3){
continue;
}
System.out.println(x);
}
}
}
运行结果:
1
2
4
5
方法
修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名n]){
执行语句
.
.
return 返回值;
}
如果方法不需要参数,参数列表可以为空。方法的返回值必须为方法声明的返回值类型,如果方法中没有返回值,返回值类型要声明为void,此时方法中return可以省略。
例如:main方法中调用getNum(int x,int y)方法,需要该方法时会为x,y分配内存并传值,return结束后会将x,y释放。
①方法的重载
方法的重载与返回值类型无关,它只需要满足两个条件,一是方法名相同,二是参数个数或参数类型不相同。
示例:
public class Override { //方法的重载
public static void main(String[] args) {
System.out.println(add(1,2));
System.out.println(add(1,2,3));
System.out.println(add(1.2,1.3));
}
public static int add(int a,int b){ //该方法实现两个整数相加
return a+b;
}
public static int add(int a,int b,int c){ //该方法实现三个整数相加
return a+b+c;
}
public static double add(double a,double b){ //该方法实现两个小数相加
return a+b;
}
}
运行结果
3
6
2.5
②方法的递归
方法的递归就是指在一个方法的内部调用自身的过程,递归必须要有结束条件,防止进入死循环。
示例:
public class Recursion { //方法的递归
public static void main(String[] args) {
System.out.println("1~n的和为"+getSum(4));
}
public static int getSum(int n){ //递归求1~n的和
if (n==1){
//满足条件,递归结束
return 1;
}
int temp = getSum(n-1);
return temp+n;
}
}
运行结果
1~n的和为10
数组
数组的定义:
int[] a = new int[10]; //从a[0]到a[9]
int[] b = {1,2,3,4};
int[] c; //声明一个int[]类型的变量
c = new int[10]; //创建一个长度为10的数组
内存状态图
可以通过“数组名.length”获取数组长度。
元素默认值
数据类型
|
默认初始化值
|
byte,short,int,long
|
0
|
float,double
|
0.0
|
char
|
一个空字符,即’\u0000’
|
boolean
|
false
|
引用数据类型
|
null,表示变量不引用任何对象
|
多维数组
int[][] a = new int[3][3];
a[0][0]
|
a[0][1]
|
a[0][2]
|
a[1][0]
|
a[1][1]
|
a[1][2]
|
a[2][0]
|
a[2][1]
|
a[2][2]
|
int[][] a = new int[3][];
a[0][0]
|
|
|
a[1][0]
|
a[1][1]
|
|
a[2][0]
|
a[2][1]
|
a[2][2]
|
int[][] a = {{1,2},{3,4,5,6},{7,8,9}};
1
|
2
|
|
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
|