public static void main(String[] args){ int a = 1,int b = 2,c; }
//变量类型 变量名称 = 初始值 int data = 1;
//初始化:第一次赋值。 int data2;//先声明后赋值。 data = 12; data = 34;//修改变量的值,第一次叫赋值,后面的就不叫了!
public static void main(String[] args){ int data = 10; data += 10; //将变量data中的值加上10的所得结果再度存入变量data中。 }
public static void main(String[] args){ int data = 3.14159;//编译报错! }
public static void main(String[] args){ int data = 10; System.out.println(daty);//编译错误 //使用之前未声明的错误很多时候是因为拼写错误引起的。 }
public static void main(String[] args){ int data,a = 2; System.out.println(data+a);//error! }
int score,myScore,myJavaScore;//驼峰命名法 int Score,MyScore,MyJavaScore;//帕斯卡命名法
int是最为常用的整数类型。一个int类型的变量占据4个字节,表示范围是: − 2 31 -2^{31} −231到 2 31 − 1 2^{31}-1 231−1。
整数直接量是int类型:
整数数据在除法运算中的取整:
public static void main(String[] args){ int data = 3/2; System.out.println(data);//结果是1,而不是1.5或2。 }
public static void main(String[] args) { int a = 2147483647; int b = -2147483648; a+=1; b-=1; System.out.println(a);//溢出报错 System.out.println(b);//溢出报错 }
一个long类型的变量需要占用8个字节,最大表示范围: − 2 63 -2^{63} −263到 2 63 − 1 2^{63}-1 263−1。
如果要表示long直接量,需要以L或者l结尾。
/** * 用来演示程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { long data = 10000*365*24*299792458L; //必须有一个long类型数据参与的运算结果才是long类型 System.out.println(data);//正确结果26261819320800000 long data2 = 10000*365*24*299792458; System.out.println(data2);//将会溢出,结果为1271239424 } }
/** * 用来演示程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { long data = System.currentTimeMillis(); System.out.println(data);//1616746242204 } }
使用double进行浮点数的运算:
浮点数的直接量是double类型:
double运算时会出现舍入误差:
/** * 用来演示程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { double data = 3.0; double data2 = 2.9; System.out.println(data-data2);//0.10000000000000009 } }
/** * 用来演示程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { boolean b = 18>16; System.out.println(b);//true } }
字符类型事实上是一个16位的无符号整数,这个值是对应字符的编码。
Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有字符都是16位置。
字符直接量可以采用诸如:‘中’的形式,也可以采用16进制的表示形式,例如:‘\u4e2d’
对于char类型数据进行赋值:
使用转义字符:
转义字符 | 含义 |
---|---|
‘\n’ | 表示换行符 |
‘\r’ | 表示回车符 |
'\ \ ’ | 表示反斜杠 \ |
’\’‘ | 表示单引号 ‘ |
‘\“’ | 表示双引号 ” |
除了boolean类型数据外,其他数据类型之间都可以进行转换。
/** * 用来演示强制转换损失精度问题的程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { long L = 1024L*1024*1024*4; int data = (int)L;//强制转换 System.out.println(data);//发生了溢出,所以结果为0 } }
/** * 用来演示强制转换损失精度问题的程序 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { long longData = 10000*10*6666666L; //由于有long类型的直接量参与运算,所以真个表达式的结果为long型数据 double doubleData = 100-99.0; //由于有double类型的直接量参与运算,所以表达式的结果为double类型 double doubleData2 = 8/10; //由于参与运算的数据都是int直接量,所以运算结果为0,再自动转换为double类型,所以结果是0.0 double doubleData3 = 8.0/10; //由于表达式中有double直接量参与运算,所以运算结果为0.8。 } }
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
nextLine方法:
package MyTest; import java.util.Scanner; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("你最爱的动物是什么?"); String name = s.nextLine(); System.out.print("你最爱的动物是:"+name ); //会打包带走换行符,但是不会包含在字符串里面! System.out.println("……"); //如果包含在了name中,那么会换行输出,但是并没有! System.out.println("This is a text!"); String text = s.nextLine(); System.out.println("Test results:"+text); //因为nextLine()会带走换行符,所以text接受不到换行符,需要键盘输入 } }
package MyTest; import java.util.Scanner; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("你的年龄是多少?"); int age = s.nextInt(); System.out.println("你的年龄是:"+ age +"岁"); //因为nextInt()不会带走输入时产生的换行符。 //所以换行符被text给接收了,因此不用再键盘输入 System.out.println("This is a text!"); String text = s.nextLine(); System.out.println("Test results:"+text); } }
next方法:
package MyTest; import java.util.Scanner; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("你最爱的动物是什么?"); String name = s.next(); System.out.println("你最爱的动物是:"+name); //就算输入的时候加上了很多的空格,但是被忽略了! } }
package MyTest; import java.util.Scanner; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("你最爱的动物是什么?"); String name = s.next(); System.out.println("你最爱的动物是:"+name); String name1 = s.next(); System.out.println("你最爱的动物是:"+name1); String name2 = s.next(); System.out.println("你最爱的动物是:"+name2); //因为空格的存在,所以断断续续的接收! } }
Java算术运算符除了通常的加减乘除(+ -*/)之外,还包括取模运算(%)和自增(++)及自减(–)运算。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { float data = 10.0F; System.out.println(data%3.3); } } //output:0.10000000000000053
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int a=10,b=20; int c=a++; int d=++b; System.out.println("a="+a+" b="+b+" c="+c+" d="+d); } } //output:a=11 b=21 c=10 d=21
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { System.out.println(10==9); System.out.println(2>=2); } } //output: //false //true
变量a | 变量b | a&&b | a||b | !a |
---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int data; System.out.println(data=10); System.out.println(data); } } //output: //10 //10
运算符 | 表达式 | 计算 |
---|---|---|
+= | X+=Y | X=X+Y |
-= | X-=Y | X=X-Y |
*= | X*=Y | X=X*Y |
/= | X/=Y | X=X/Y |
%= | X%=Y | X=X%Y |
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int data=10; data+=10.0;//相当于data=(int)(10+10.0); System.out.println(data); } } //output: //20
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { String string = ""; int data = 10; string = "a="+data; System.out.println(string); string = ""+100+200; System.out.println(string); string = 100 + 200 + ""; System.out.println(string); } } //output: // a=10 //100200 //300
boolean表达式? 表达式1:表达式2
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int a = 10,b = 20; int flag = a>b? 1:-1; System.out.println(flag); } } //output: //-1
package MyTest; import java.util.Scanner; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int data = scanner.nextInt(); String string = data>0? "正数":(data==0? "0":"负数"); System.out.println(string); scanner.close(); } } //output: // 12 //正数
if(布尔表达式){ //如果布尔表达式为true将执行的语句 }
如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。
if(布尔表达式){ //如果布尔表达式的值为true }else{ //如果布尔表达式的值为false }
if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码 }else if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码 }else if(布尔表达式 3){ //如果布尔表达式 3的值为true执行代码 }else { //如果以上布尔表达式都不为true执行代码 }
if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码 if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码 } }
switch(expression){ case value1 : //语句 break; //可选 case value2 : //语句 break; //可选 //你可以有任意数量的case语句 default : //可选 //语句 }
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { char grade='C'; switch(grade) { case 'A' : System.out.println("优秀"); break; case 'B' : case 'C' : System.out.println("良好"); break; case 'D' : System.out.println("及格"); break; case 'F' : System.out.println("你需要再努力努力"); break; default : System.out.println("未知等级"); } System.out.println("你的等级是 " + grade); } } //output: // 良好 //你的等级是 C
如果 case 语句块中没有 break 语句时,JVM 并不会顺序输出每一个 case 对应的返回值,而是继续匹配,匹配不成功则返回默认 case(default那一栏)。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int i = 5; switch(i) { case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); } } } //output: // default
如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { char grade='D'; switch(grade) { case 'A' : System.out.println("优秀"); case 'B' : case 'C' : System.out.println("良好"); case 'D' : System.out.println("及格"); case 'F' : System.out.println("你需要再努力努力"); default : System.out.println("未知等级"); } System.out.println("你的等级是 " + grade); } } //output: // 及格 //你需要再努力努力 //未知等级 //你的等级是 D
while( 布尔表达式 ) { //循环内容 }
只要布尔表达式为 true,循环就会一直执行下去。
do { //代码语句 }while(布尔表达式);
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
for循环执行的次数是在执行前就确定的。
for(初始化; 布尔表达式; 更新) { //代码语句 }
关于 for 循环有以下几点说明:
for(声明语句 : 表达式) { //代码句子 }
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] data = {1,2,3,4,5,6,7,8,9,10}; for (int s:data){ System.out.print(s+" "); } } } //output: // 1 2 3 4 5 6 7 8 9 10
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int i; for (i = 1;i<=15;i++){ if (i==12) break; } System.out.println(i); } } //output: //12
个人理解:其实就是跳出continue所在循环的本次循环,进入下一次循环。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int i; for (i = 1;i<=6;i++){ if (i==3) continue; else System.out.print(i+" "); } } } //output: //1 2 4 5 6
数据类型[] 数组名 = new 数据类型[大小]; int[] array = new int[10];
补充:int[ ] array与int array[ ]两种写法都可以。
int[] array = {1,2,3,4,5,6,7,8,9,10};
补充:元素的个数即为数组的长度。
int[] array; array = {1,2,3,4,5,6,7,8,9,10};//error!
int[] array; array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//right!
注意:[]中不可以写长度,元素的个数就是数组的长度。
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8,9,10}; System.out.println(array[6]); } } //output: //7
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8,9,10}; for (int i=0;i<=array.length-1;i++) System.out.print(array[i]+" "); } } //output: //1 2 3 4 5 6 7 8 9 10
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8,9,10}; for (int data:array) { System.out.print(data+" "); } } } //output: //1 2 3 4 5 6 7 8 9 10
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) //src - 源数组。 //srcPos - 源数组中的起始位置。 //dest - 目标数组。 //destPos - 目的地数据中的起始位置。 //length - 要复制的数组元素的数量。
public class Test { public static void main(String[] args) { int[] array1,array2; array1 = new int[6]; array2 = new int[array1.length]; for (int i=0;i< array1.length;i++)//初始化 array1[i] = (int)(Math.random()*100); for (int j=0;j< array1.length;j++)//逐个复制 array2[j] = array1[j]; } }
public static object[] copyOf(object[] original,int newLength) //生成的新数组是原始数组的副本
newLength小于原数组,则进行截取。
newLength大于原数组,则大于的部分使用0或者null进行填充。
package MyTest; import java.util.Arrays; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = {1,3,5,7,9}; int[] copy = Arrays.copyOf(array,7); for (int data:copy) {//大于原数组的部分补上0 System.out.print(" "+data); } } } //output: // 1 3 5 7 9 0 0
package MyTest; import java.util.Arrays; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = {1,3,5,7,9}; //该函数可用于数组的扩容! array = Arrays.copyOf(array,array.length+1); for (int data:array) { System.out.print(" "+data); } } } //output: //1 3 5 7 9 0
package MyTest; import java.util.Arrays; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = new int[10]; for (int i=0;i<array.length;i++) array[i] = (int)(Math.random()*100); System.out.print("排序之前的数据:"); for (int data:array) { System.out.print(" "+data); } System.out.println(); //进行升序排序 Arrays.sort(array); System.out.print("排序之后的数据:"); for (int data:array) { System.out.print(" "+data); } } } //output: //排序之前的数据: 85 56 4 45 81 86 49 25 25 23 //排序之后的数据: 4 23 25 25 45 49 56 81 85 86
package MyTest; /** * 用于一些代码的测试 * @author YiWen Wan */ public class Test{ public static void main(String[] args) { int[] array = new int[10]; for (int i=0;i<array.length;i++)//赋予数据 array[i] = (int)(Math.random()*100); System.out.print("排序之前的数据:"); for (int data:array ) { System.out.print(" "+data); } System.out.println(); //进行冒泡排序,从小到大进行排序! for (int i=0;i<array.length-1;i++){ for (int j=1;j< array.length-i;j++){ //这里使用减法更好一点,不容易越界,便于控制! if (array[j]<array[j-1])//进行两数交换,更大的数据向后面走 array[j-1] = (array[j-1]+array[j])-(array[j]=array[j-1]); } } System.out.print("排序之后的数据:"); for (int data:array) { System.out.print(" "+data); } } } //output: //排序之前的数据: 17 84 93 31 2 97 1 82 61 12 //排序之后的数据: 1 2 12 17 31 61 82 84 93 97