一基础:
1.数据类型:
八大基本数据类型:byte short char int long float double。注意:float声明赋值时要在后面加上" f "符号。
引用数据类型:
类(class):如,字符串String
接口(interface)
数组(array)
2.标识符,关键字:
注意:String 不是关键字,是类。
goto和const是保留关键字,一般都不使用。
3.变量:
成员变量:在方法体外,类中声明的变量。
静态变量:声明时要在成员变量类型前加上关键字"static"。
实例变量。
局部变量:在方法体内声明的变量。
当方法内的局部变量 i 和类的变量 i 重命,那么在该方法内局部变量会替换掉类的变量。
4.运算符
运算时,整数类型默认为int类型,浮点数类型默认为double类型,都应强制性转换。
"+="或"-="运算结果为原来类型,不需强制性转换。
自增:
"++a"与"a++"区别:"++a"是先增加再运算,"a++"是先运算,再增加。自减同理。
&与&&的区别:当第一个表达式为假时,&&符号则不需要执行第二个表达式,而&则无论如何都要执行。
|与||的区别:同理。
位运算符:
按位与"&":同为1,才为1。
按位或"|":同为0,则为0。
按位取反"~":二进制1改为0,0改为1。
移位操作:移位操作效率高。
<<:>
>>:右移
>>>:无符号右移
三元运算符
5.数据类型转换:
int a = (int) 1.3;
练习:
1.写出运算结果
classNumber{public static voidmain(String[] args){int a=3,b=8;int c=(a>b)?a++:b++;
System.out.println("a="+a+" b="+b+" c="+c);int d=(a>b)?++a:++b;
System.out.println("a="+a+" b="+b+" d="+d);int e=(a
System.out.println("a="+a+" b="+b+" e="+e);int f=(a
System.out.println("a="+a+" b="+b+" f="+f);
}
}
---------- java ----------
a=3 b=9 c=8
a=3 b=10 d=10
a=4 b=10 e=3
a=5 b=10 f=5
2.用最有效率的方法算出2乘以8等于几
答:2 << 3
3.char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,
所以放一个中文是可以的。
二流程:
1.if-else流程
语法:
if(判断表达式){
为true时执行
}else{
为false时执行
}
注意:若无{},有多个if、else时,else与最近的if组成一对。
2.switch流程
语法:
switch(变量){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
… …
case 常量N:
语句N;
break;
default:
语句;
break;
}
注意:写的时候不要忘记写break,没有break会全部执行,结果不一样。
switch()内可以是byte,short,char,int,String等,不可用浮点类型和long类型。
3.for流程
语法:
for(初始化部分; 循环条件部分; 迭代部分) {
循环体部分
}
语法:foreach 作用:遍历数组a
for(int i : a) {
}
注意:{}不可省略
4.while流程与do-while流程
while语法:
[初始化]
while(布尔值表达式) {
循环语句;
迭代语句;
}
do-while语法:
[初始化]
do{
循环语句;
迭代语句;
}while(布尔值表达式);
区别:do-while无论如何至少会执行一次,而while只有布尔值表达式为true时才会执行。
注意:do-while的while()后面要加上";"。
5.break语句
语法1:用于结束所在的一层循环块。
{
break;
}
语法2:break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: {
label2: {
label3: {
break label2;
}
}
}
6.continue语句
语法1:用于提前结果本次循环。
{
continue;
}
语法2:在某个循环体前加上标号,在continue后使用该标号,从而提前结果这个循环体的本次循环。
与break类似。
7.return语句
用于中止方法的。
return 后面只能根返回值且return后面的返回值类型必须跟方法的返回值类型一致。
注意:
break,continue,return共同点:后面不能再直接紧跟任何语句,否则编译错误提示:无法访问的语句。
练习:
1.从键盘分别输入年、月、日,判断这一天是当年的第几天。
1 public classTest {2 public static voidmain(String[] args) {3 Scanner scanner = newScanner(System.in);4 System.out.println("输入year:");5 int year =scanner.nextInt();6 System.out.println("输入month:");7 int month =scanner.nextInt();8 System.out.println("输入day:");9 int day =scanner.nextInt();10 int sumDay = 0;11 switch(month) {12 case 12:13 sumDay += 30;14 case 11:15 sumDay += 31;16 case 10:17 sumDay += 30;18 case 9:19 sumDay += 31;20 case 8:21 sumDay += 31;22 case 7:23 sumDay += 30;24 case 6:25 sumDay += 31;26 case 5:27 sumDay += 30;28 case 4:29 sumDay += 31;30 case 3:31 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){32 sumDay += 29;33 } else{34 sumDay += 28;35 }36 case 2:37 sumDay += 31;38 case 1:39 sumDay +=day;40
41 }42 System.out.println(year + "年" + month + "月" + day + "日是今年的第" +sumDay43 + "天");44 }45 }
2.打印如下图形
//上半部分
for(int i = 0;i < 5;i++){//输出“-”
for(int j = 0;j < 4-i;j++){
System.out.print(" ");
}//输出“* ”
for(int k = 0;k < i+1;k++){
System.out.print("* ");
}
System.out.println();
}//下半部分
for(int i = 0;i < 4;i++){for(int j = 0;j < i+1;j++){
System.out.print(" ");
}for(int k = 0;k < 4-i;k++){
System.out.print("* ");
}
System.out.println();
}
3.输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
classShuiXianHua{public static voidmain(String[] args){for(int i = 100;i < 1000;i++){//实现所有的三位数的一个遍历
int j1 = 0;int j2 = 0;int j3 = 0;
j1= i / 100;//百位
j2 = (i - 100*j1) / 10;//十位
j3 = i - 100*j1 - 10*j2;//个位
if( i == j1*j1*j1 + j2*j2*j2 + j3*j3*j3){
System.out.println("此数值为满足条件的水仙花数:" +i);
}
}
}
}
三字符串:
1.String 类代表字符串。
2.String 常用方法:
返回指定索引处的 char 值。
String anotherString)
按字典顺序比较两个字符串。
String 与另一个 String 比较,不考虑大小写。
返回一个新的字符串,它是通过用 newChar
替换此字符串中出现的所有 oldChar 得到的。
正则表达式的匹配拆分此字符串。
返回一个新字符串,它是此字符串的一个子字符串。
String 中的所有字符都转换为小写。
String 中的所有字符都转换为大写。
返回 int 参数的字符串表示形式。
四数组:
1.一维数组
数据组的定义:数据类型[] 数组变量名。
静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
如int[] array2 = {0, 1, 2};//数组间的元素使用英文逗号","分隔。
int[] array3 = new int[]{0, 1, 2};
动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行。
如int[] array4 = new int[3];
array4[0] = 0;array4[1] = 1;array4[2] = 2;
注意:
1.数组初始化时,必须指定长度。
2.数组的每个元素跟类的成员变量一样,都会被默认初始化,且基本数据类型初始值为相应的类型初始化值,而引用数据类型的初始化值为null。
2.多维数组
格式1(动态初始化):int[][] arr = new int[3][2];
格式2(动态初始化):int[][] arr = new int[3][];
每个一维数组都是默认初始化值null (注意:区别于格式1)
3.数组常用方法
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
如果两个指定的 int 型数组彼此相等,则返回 true。
将指定的 int 值分配给指定 int 型数组的每个元素。
对指定的 int 型数组按数字升序进行排序。
返回指定数组内容的字符串表示形式。
练习:
1.冒泡排序和选择排序
public classSort{public void bubble(int[] array){if(array == null || array.length == 0){return;
}
System.out.println("排序前:" +Arrays.toString(array));int len =array.length;for(int i = 0; i < len - 1; i++){//为什么是len - 1,因为最后一个不需要再去排序
for(int j = 0; j < len - 1 - i; j++){//为什么是len - 1 - i。因为每一次排序都会把最大的放到最后
if(array[j] > array[j + 1]){
array[j]= array[j] ^ array[j + 1];
array[j+ 1] = array[j] ^ array[j + 1];
array[j]= array[j] ^ array[j + 1];
}
}
}
System.out.println("冒泡排序后:" +Arrays.toString(array));
}public void select(int[] array){if(array == null || array.length == 0){return;
}
System.out.println("排序前:" +Arrays.toString(array));int len =array.length;for(int i = 0; i < len - 1; i++){int minIndex =i;for(int j = i + 1; j < len; j++){if(array[minIndex] >array[j]){
minIndex=j;
}
}if(minIndex !=i){
array[minIndex]= array[minIndex] ^array[i];
array[i]= array[minIndex] ^array[i];
array[minIndex]= array[minIndex] ^array[i];
}
}
System.out.println("选择排序后:" +Arrays.toString(array));
}
}
public classSortDemo{public static voidmain(String[] args){int[] array = {49, 38, 65, 97, 76, 13, 27, 49};
Sort sort= newSort();
sort.bubble(array);
sort.select(array);
}
}