进一步的走进java

一、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();
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ZhuiZhuDream5/article/details/83691755