一.流程控制语句
判断结构
if ...else if... else if.... else.... 嵌套用法
代码实现
class IfDemo2
{
public static void main(String[] args)
{
/*
if语句的第二种格式:
if(条件表达式)
{
执行语句;
}
else//否则
{
执行语句;
}
*/
int x = 1;
if(x>1)
{
System.out.println("yes");
}
else
{
System.out.println("no");
}
System.out.println("Hello World!");
int a = 3,b;
/*
if(a>1)
b = 100;
else
b = 200;
*/
b = a>1?100:200;//三元运算符就是if else 语句简写格式。
// 简写格式什么时候用?
// 当ifelse运算后,有一个具体的结果时,可以简化写成三元运算符。
System.out.println("b="+b);
}
}
选择分支结构
switch.... case 嵌套用法
switch语句选择的类型只有四种:byte,short,int , char JDK1.5中支持了枚举类型 ,JDK1.7中支持了String 类型
结束switch语句的两种情况:遇到break,执行到switch语句结束
如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束
if和switch的应用:
if:
1,对具体的值进行判断。
2,对区间判断。
3,对运算结果是boolean类型的表达式进行判断。
switch:
1,对具体的值进行判断。
2,值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。
效率相对高一点。
if:
1,对具体的值进行判断。
2,对区间判断。
3,对运算结果是boolean类型的表达式进行判断。
switch:
1,对具体的值进行判断。
2,值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。
效率相对高一点。
代码实现:
class SwitchDemo
{
public static void main(String[] args)
{
/*
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
*/
int x = 2;
switch(x)//byte,short,int,char.
{
default:
System.out.println("d");
//break;
case 4:
System.out.println("a");
//break;
case 1:
System.out.println("b");
break;
case 3:
System.out.println("c");
break;
}
int a = 4,b =2;
char opr = '%';
switch(opr)
{
case '+':
System.out.println(a+b);
break;
case '-':
System.out.println(a-b);
break;
case '*':
System.out.println(a*b);
break;
case '/':
System.out.println(a/b);
break;
default:
System.out.println("无法运算,符号不支持");
break;
}
}
}
循环结构
while , for, do...while, 嵌套用法
,for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环 条件,重复找个过程,直到条件不满足为止
while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用
最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环
代码实现:
for 语句
class ForDemo
{
public static void main(String[] args)
{
/*
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;(循环体)
}
for(int x = 1; x<3; x++)
{
System.out.println("x="+x);
}
*/
int x = 1;
for(System.out.println("a");x<3; System.out.println("c"))
{
System.out.println("d");
x++;
}
// for(int a=0,b=0; a<3; a++,b--)
//a d c d c
}
}
while语句:
class WhileDemo
{
public static void main(String[] args)
{
/*
while(条件表达式)
{
执行语句;
}
*/
int x = 1;
while(x<3);
{
System.out.println("x="+x);
x++;
}
}
}
do while 语句:
class DoWhileDemo
{
public static void main(String[] args)
{
/*
do
{
执行语句;
}while(条件表达式);
*/
int x = 1;
do
{
System.out.println("x="+x);
x++;
}
while (x<1);
/*
do while语句的特点:无论条件是否满足,循环体至少执行一次。
*/
int y = 1;
while(y<1)
{
System.out.println("y="+y);
y++;
}
}
其他流程控制语句
break 语句
continue 语句
标号语句 break/ continue: 标号名
eg:
class BreakContinueDemo
{
public static void main(String[] args)
{
/*
break:跳出。
break作用的范围:要么是switch语句,要么是循环语句。
记住:当break语句单独存在时,下面不要定义其他语句,因为执行不到。
break跳出所在的当前循环。
如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成。
for(int x=0; x<3; x++)
{
if(x==1)
break;
System.out.println("x="+x);
}
b:for (int x=0; x<3 ;x++ )
{
c:for (int y=0; y<4 ; y++)
{
System.out.println("x="+x);
break b;
}
}*/
/*
continue:继续。
作用的范围:循环结构。
continue:结束本次循环,继续下次循环。
如果continue单独存在时,下面不要有任何语句,因为执行不到。
for (int x=0; x<11 ;x++ )
{
if(x%2==0)
continue;
System.out.println("x="+x);
}
*/
c:for (int x=0; x<3 ;x++ )
{
b:for (int y=0; y<4 ; y++)
{
System.out.println("x="+x);
continue c;
}
}
}
}
-------------------------------------------------------------------------------------------------------------------------
二.java函数
函数格式:
修饰符 返回值类型 函数名(参数类型 形式参数1...){
执行语句;
return 返回值;
}
特点:
定义函数可以将功能代码进行封装
便于对该功能进行复用
函数只有被调用才会被执行
函数的出现提高了代码的复用性
对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
函数重载
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
特点:
与返回值类型无关,只看参数列表
面试题:
Overload 和 Override 区别 方法的重写Override和重载Overload是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
eg:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
-------------------------------------------------------------------------------------------------------------------------
JVM方法调用的执行过程
三.java数组
概念:
同一种类型数据的集合。其实数组就是一个容器
格式 :
元素类型[] 数组名 = new 元素类型[元素个数]
元素类型[] 数组名 = new 元素类型[元素,元素....]
数组内存结构
常见的数组排序操作
选择排序
eg:
for(int x=0;x<a.length-1;x++){
for(int y=x+1;y<a.length;y++){
if(a[x]>a[y]){
int temp=a[x];
a[x]=a[y];
a[y]=temp;
}
}
}
冒泡排序
for(int x=0;x<a.length-1;x++){
for(int y=0;y<a.length-x-1;y++){
if(a[y]>a[y+1]){
int temp=a[y];
a[y]=a[y+1];
a[y+1]=temp;
}
}
}
折半查找
public static int halfSearch_2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
进制转换:
public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for(int x=0; x<8; x++)
{
int temp = num & 15;
if(temp>9)
//System.out.println((char)(temp-10+'A'));
sb.append((char)(temp-10+'A'));
else
//System.out.println(temp);
sb.append(temp);
num = num >>> 4;
}
System.out.println(sb.reverse());
}
二维数组
格式定义
int[][] arr = new int[4][4]
int[][] arr = new int[4][]
int[][] arr = {{5,2,2},{3,5},{5,3,15,6}}
注意:第三个一维数组长度 arr[2].length
注意:第三个一维数组长度 arr[2].length