一、java运算符
我们从小学开始学习的数学就有运算的先后顺序,起始它就是优先级。同样在java中我们也会出现优先级,那么接下来我们看看java的运算符的优先级。
1.基础运算符
(1)自增
++x :先使用后加1
x++:先加1后使用
(2)自减
–x:先使用后减1
x-- :先减1后使用
(3)三目运算符
数据类型 变量 = 布尔表达式? 满足时赋值:不满足时赋值
三目运算符也可以用在比较两个、三个、多个数的大小,返回最大值。
(4)关系运算符(面试重点)
关系运算符又分为逻辑关系运算符和位关系运算符。
*逻辑关系运算符:&&、||、!
它们的返回值只有true、false
*位关系运算符:&、|
它们是将数值转化为二进制数来进行运算。
二、程序逻辑控制和方法的定义与使用
注意:传参是在运行的时候进行的
1.程序结构与逻辑控制
(1)分支结构
总共有两种形式:
if(布尔表达式){
//条件满足的时候执行
} else{
//条件不满足的时候执行
}
if(布尔表达式){
//条件满足的时候执行
} else if(布尔表达式){
//条件满足的时候执行
}…
else{
//条件不满足的时候执行
}
(2)switch语句
switch(数字、字符、枚举、字符串){
case 情况1{
执行内容;
break;
}
case 情况2{
执行内容;
break;
}
……
default{
不满足时执行的内容;
}
}
(3)循环结构
while(布尔类型表达式){
执行内容;
}
do{
执行内容;
}while(布尔类型表达式);
for(表达式1;布尔类型表达式;表达式3){
}
eg:
打印一个我们熟悉的乘法口诀表
public class Cheng{
public static void main(String[] args){
public void Str(){
int row=1;
int col=1;
int result=0;
for(row=1;row<10;row++){
for(col=1;col<row;col++){
result=col*row;
System.out.print(row+"*"+col+"="+result+" ");
}
System.out.println();
}
}
}
}
注意:对于以上三种循环的结构有一个小小的建议:
如果不知道循环次数的循环我们就使用while,如果已知循环次数的循环我们就使用for循环。
(4)循环控制(continue、break)
cotinue:退出本次循环
break:退出整个循环
2.方法的定义与使用
java中的方法就是C语言中的函数,它表示这段代码的功能会被多次执行。
(1)当方法的返回类型是void时:
public static void arrary{
return ;//若执行这条语句表示后面的代码将不执行,方法结束调用
}
对于返回值类型时void时,它可以返回,写一个return,但是后面不可以跟任何的东西。一般在循环中需要提前结束程序的时候才会使用。
(2)方法重载
定义:方法名字相同,参数的类型、个数、顺序不同。
注意:
a.重要:对于方法里面的返回类型不是判断方法重载的条件。所以不可以有两个方法名字相同,参数个数相同,参数类型相同而返回值类型不同的函数,它们不叫方法重载。
b.在进行方法重载的时候,要求返回值类型一样,即重载的方法它返回的值表达的意思是一样的,这样更加有益于代码的执行。
(3)方法的递归
自己调用自己就是方法的递归实现。但是需要有递归出口,如果没有将会栈溢出,但是在编译的时候可以通过,在执行的时候会一直执行到不可以再为止开辟空间为止。
eg:实现60!
public class Fac{
public static long jiecheng(long num){
if(num==1L){
return 1L;
}else{
return num*jiecheng(num-1);
}
}
public static void main(String[] args){
int num=60;
long result=(long)jiecheng(num);
System.out.println(result);
}
}
在这里需要注意的是:int可能放不下阶乘后的结果,所以我们使用更大的类型。
3.javaSE之数组的定义与使用
(1)数组的初始化(在java中数组是引用类型,存在内存分配问题。)
a.动态初始化(先定义再赋值)
数据类型[] 数组名称 = 数据类型 [长度];
b.静态初始化(边定义边赋值)
数据类型[] 数组名称 = 数据类型 [] {赋值};
在对一个数组初始化以后(即开辟了空间)以后就可以进行一下操作了:
*数组的访问通过索引完成。如果出现访问超过索引将会出现"java.lang.ArrayIndexOutOfBoundException"异常信息。
*当数组是采用动态初始化的时候,开辟空间以后,数组之中的每个元素都是该数据类型的默认值(引用数据类型就是null)。
*数组本身是一个有序的集合。
*java中有一种动态取数组长度的方法:数组名称.length;
eg:
int[] a = new int[8];
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
运行结果:
Int 的默认值就是0.
(2)数组引用传递
数组中引用空间传递 :同一块内存空间可以被不同的栈内存所指向。
数组也有缺陷:长度太固定,会出现越界现象。
(3)匿名数组
public static void main(String[] args){
System.out.println(new int[]{1,2,3,4,5});//匿名数组
}
匿名数组:没有栈指向它,只是在堆中开辟了空间。
(4)二维数组
数据类型 [ ] [ ] 对象数组 = new 数据类型[行的个数][列的个数];
(5)重点:数组与方法互相操作
方法修改数组
public class Cheng{
public static void main(String[] args){
int[] data =init();
bigger(data);
printArray(data);
}
//定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5};//匿名数组
}
//将数组中每个元素的值夸大5倍
public static void bigger(int[] arr){
for(int i=0;i<arr.length;i++){
arr[i]*=5;
}
}
public static void printArray(int[] temp){
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
}
}
运行结果:
对于结果我们可以从两个方面去解释:
从指针C语言方面解释:数组作为参数传递的时候相当于指张针,那么所指向的内容都是一样的。所以对于传参后的操作就相当于在操作实参,内存的东西就会发生改变。
从java的角度来理解:当调用inishushu’jut()函数后相当于将原来栈中存放的地址拷贝了一份给Int[] arr 这个数组,那么arr和data指向的是同一块堆内存,所以堆谁操作另外一个的结果也会发生改变。
要想结果不改变我们就需要重新开辟一段对空间,拷贝一份同样的值对这一份拷贝的进行操作,那么原来的那一份数据就不会发生改变。具体如下:
public static int[] Expend(int[] a){
int[] temp=new int[a.length];
for(int i=0;i<5;i++){
temp[i]=a[i]*5;
}
return temp;
}
(6)java对数组的支持
数组排序:java.util.Arrays.sort(数组名称);
public class Array{
public static void main(String[] args){
int[] intData = new int[]{1,65,55,23,100};
char[] charData = new char[] {'z','A','a','c'};
java.util.Arrays.sort(intData);
java.util.Arrays.sort(charData);
printArray(intData);
printArray(charData);
}
public static void printArray(int[] temp){
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
System.out.println();
}
//重载
public static void printArray(char[] temp){
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
System.out.println();
}
}
运行结果:
数组拷贝:System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
public class Array{
public static void main(String[] args){
int[] dataA =new int[]{1,2,3,4,5,6,7,8,9};
int[] dataB = new int[]{11,22,33,44,55,66,77,88,99};
System.arraycopy(dataB,4,dataA,1,3);
printArray(dataA);
}
public static void printArray(int[] temp){
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
System.out.println();
}
}
运行结果: