1 数据类型
1.1 隐式数据类型转换:系统会自动把容纳信息量小的数据类型转换成信息量大的数据类型。
显式数据类型转换:需要声明,否则会出现编译错误。
(数据类型)数据或变量
int a=(int)3.0
1.2 只有整数才能进行取余(%)运算。
1.3 被除数和除数都是整数,其结果实际上在取整。如果要计算分数的值需要把分子或分母用实数表示。
1.4 a*=b+c等效于a=a*(b+c)
1.5 nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()
1.6 实数在程序中是近似储存。
1.7 print与printlin相比前者不换行,后者换行。
2 顺序结构
2.1 char 2字节
2.2 ‘\xxx’ 表示八进制 a=‘\102’ 八进制的66,对应B。
'\xxx' 表示十六进制 a='\u0043' 十六进制的67,对应C。
2.3 用System的next()函数连接charAt(0)来输入字符:
a=in.next().charAt(0);
2.4 类和对象是面向对象程序设计中的最核心概念。
3 选择结构
3.1 if 语句:
if(布尔表达式){
语句块1;
}else{
语句块2;
}
语句块后只有一条语句可以省略’{}‘
3.2 多分支结构:
if(布尔表达式){
语句块1;
}else if{
语句块2;
}else if{
语句块3;
}else{
语句块4;
}
3.3 switch语句:
嵌套层数较多时,可读性较强。
switch(表达式){
case 值1:语句块1;[break;]
case 值2:语句块2;[break;]
...
case 值n:语句块n;[break;]
[default:语句块n+1;]
}
表达式的值的类型不允许是实数类型。
除特殊情况break不可省略。省略会一直往后执行,直到语句结束或遇到break语句。
3.4 问号表达式:
布尔表达式?表达式1:表达式2;
4 循环结构
4.1 while 循环 当型循环
while(布尔表达式)
{
循环体语句块
}
4.2 do while 循环 直到型循环
do{
循环体语句块
}while(布尔表达式);
4.3 for 循环 当型循环
for(初值表达式;布尔表达式;循环控制表达式)
{
循环体语句块
}
4.4 循环控制语句
break;
break 标号; //有标号可以指定退出多层循环。
coutinue;
continue 标号;
5 数组
5.1 一维数组
1 先声明后初始化:
类型标识符 数组名[]; 或 类型标识符[] 数组名;
数组名=new 类型标识符[数组长度];
2 合并两条:
int[ ] a=new int [6];
3 数组名.length
5.2 二维数组 //不可以只指定列数不指定行数
先声明后初始化:
类型标识符 数组名[][]; 或 类型标识符[][] 数组名;
数组名=new 类型标识符[数组长度][数组长度];或 数组名=new 类型标识符[数组长度][];
两条合并:
类型说明符 [][] 数组名=new 类型说明符[数组长度][];
或
类型说明符 数组名 [][]=new 类型说明符[数组长度][数组长度];
数组名.length
数组名[i].length
5.3 效率更高的冒泡法:
import java.util.Scanner;
public class 冒泡法 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int[] a=new int[5];
int i,j,t;
//输入数据
for(i=0;i< a.length;i++)
a[i]=in.nextInt();
//处理数据
for(i=0;i<a.length;i++) {
boolean isSwap=false; //假定本轮没有发生交换
for (j = 0; j < a.length-1-i; j++) //最后的i+1个元素已经有序
if (a[j+1] < a[j]) {
t=a[j];
a[j] = a[j+1];
a[j+1]=t;
isSwap=true;
}
if(!isSwap) //如果本轮没有发生交换,排序结束
break;
}
//输出
for(i=0;i< a.length;i++)
System.out.print(a[i]+" ");
}
}
高性能的排序算法可参考数据结构或算法类教材
5.4 Arrays类
1 sort 函数 (用于升序排序)
调用方法:
Arrays.sort(数组名);
Arrays.sort(数组名,int fromIndex,inttoIndex); //将下标从多少到多少排序
2 binarySearch函数 //二分法查找某个元素,返回下标,需确保数据是有序的。
Arrays. binarySearch(数组名,要查找的数据);
5.5 .toCharArray();
可以将字符串的序列转化成对应的字符数组。
5.6 Random类
可以生成任何类型的随机数
Random xxx=new Random(n);
6 字符串
6.1字符串的创建
String类对象创建,new关键词创建
用new创建相同的字符串,地址不同。
字符串的比较方法:
1 ”==“,比较的是引用地址
2 equals 函数,比较的是字符串内容
String对象不可修改,每次修改字符串内容都是创建了一个新字符串。
6.2 String.valueOf(参数)方法可以将任何类型的参数转换为String类型
6.3StringBuffer类 可变字符串类
new StringBuffer();/new StringBuffer("hello");
如果频繁对字符串进行修改StringBuffer运行速度会更快一些。修改不频繁则使用String类会更好。
与StringBuffer相似的还有StringBuilder,前者是线程安全的,后者的运行速度更快。
6.4 包装类
6.5 日期时间类
1 date类
2 Calendar类 // 建议使用
Calendar calendar=Calendar.getInstance();
7 函数
7.1定义
[public] [static] 返回值 函数名(参数列表){
函数体
}
如果函数有多个参数,每个参数的数据类型都必须独立声明。
7.2
值传递---基本数据类型
地址传递--其他数据类型
对String类型的传递,为地址传递,但由于String类型不可更改,对该地址的修改会创立新的对象(在新地址中),原地址数据不变,因此其效果与值传递相同。
7.3 全局变量与局部变量
全局变量与局部变量的名字相同,则使用局部变量。