1,打印:
*****
*****
*****
*****
外循环控制行,内循环控制列。
for(int x=0;x<4;x++) { for(int y=0;y<5;y++) { System.out.print("*"); } System.out.println();//换行 }
2,打印:
*****
****
***
**
*
//方法1: int z = 5; for(int x=1;x<=5;x++) { for(int y=1;y<=z;y++) { System.out.print("*"); } System.out.println(); z--; } //方法2: int z=1; for(int x=1;x<=5;x++) { for(int y=z;y<=5;y++) { System.out.print("*"); } System.out.println(); z++; } //方法3: for(int x=1;x<=5;x++) { for(int y=x;y<=5;y++) { System.out.print("*"); } System.out.println(); }
3,打印:
54321
5432
543
54
5
for(int x=1;x<=5;x++) { for(int y=5;y>=x;y--) { System.out.print(y); } System.out.println(); }
4,打印99乘法表
for(int x=1;x<=9;x++) { for(int y=1;y<=x;y++) { System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.prtinln(); }
5,打印:
* * * * *
* * * *
* * *
* *
*
for(int x=1;x<=5;x++) { for(int y=1;y<x;y++) { System.out.print(" "); } for(int z=x;z<=5;z++) { System.out.print("* "); } System.out.println(); }
\n:回车
\t:制表符
\b:退格
\r:按下回车键
Windows系统中回车符其实是由两个符号组成的:\r\n。
Linux中是\n。
应用:
打印: "Hello World"
应输入:"\"HelloWorld"\"
打印:\Hello World\
应输入:"\\Hello World\\"
1,break的作用,跳出当前循环。还可以通过给循环定义名字,跳出指定的循环圈。
跳出指定循环圈示例:
a:for(int x=0;x<3;x++) { b:for(int y=0;y<4;y++) { System.out.println("x=" + x); break a; //跳出名为a的循环圈 } }
break的作用范围:要么是switch语句,要么是循环语句。
记住:当break语句单独存在时,下面不要定义其他语句,因为执行不到。
break跳出所在的当前循环。
如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成。
2,continue继续
作用范围:循环结构。
作用:结束本次循环,继续下次循环。
如果continue单独存在时,下面不要有任何语句,因为执行不到。
continue也可以像break那样,定义标记继续执行指定的循环圈。
1,定义:函数就是定义在类中的具有特定功能的一段独立小程序,函数也成为方法。
例如:
class Function{ public static void main(String[] args) { int c = add(3,4); System.out.println("c=" + c); } int add(int a,int b) { return a+b; } }
Main是函数,add也是函数。
1,格式(模版)
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...){
执行语句;
return返回值;
}
2,函数执行到return就结束,之后的语句都不执行,若后面有语句编译报错。
1,void:无返回值类型
2,特殊情况:
功能没有具体的返回值,这时return后面直接用分号结束。
注意:如果返回值类型是void,那么函数中的return语句可以省略不写。
1,必须注重提高代码的重复使用性。
2,函数的特点:
(1)定义函数可以将功能代码进行封装。
(2)便于对该功能进行复用。
(3)函数只有被调用才会被执行。
(4)函数的出现提高了代码的复用性。
(5)没有返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
(1)函数中只能调用函数,不能在函数中定义函数。
(2)定义函数时,函数的结果应该返回给调用者,交由调用者处理。
1,函数返回的结果应该交给调用者进行下一步处理,不要直接在函数内处理。
2,输出语句中的参数应该是一个具体的数值,不能是void类型的数据。
1,如何定义一个函数?通过两个明确完成。
明确一:这个功能的结果是什么?(其实就是明确函数的返回值类型)
明确二:这个功能实现过程中是否需要位置内容参与运算。(其实就是定义参数列表)明确参数的个数和参数的类型。
2,返回值类型和参数类型没有直接关系。
1,判断两个数是否相等:
明确一:返回值为boolean类型。
明确二:有两个未知整数参与运算。
public static boolean equals(int a,int b) { /* 方法1: if(a==b) { return true; } else { return false; } */ /* 方法2: return (a==b)?true:false; */ /* 方法3: if(a==b) { return true; } return false; */ //方法4: return a==b; }
2,获取两个整数较大的数
明确一:返回值为int型。
明确二:两个int型整数参与运算。
public static int getMax(int a,int b) { /* 方法1: if(a>b) return a; else return b; */ //方法2: return a>b?a:b; }
由于返回值是int型,不能直接写return a>b;它返回boolean型。
3,要注意什么使用if-else,什么时候使用连续if,应在满足需求的情况下最大限度的提高效率。还要注意&&与&,||与|的区别。
1,特点:
(1)在同一个类中。
(2)同名。
(3)参数个数或参数类型不同。
(4)函数重载和返回值类型无关。
(5)Java是严谨性的语言,如果函数出现调用的不确定性,编译会失败。
2,重载定义:
在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
3,重载示例:
class FunctionDemo{ public static void main(String[] args) { add(4,5); //调用第一个函数 add(4.4,5.5); //调用第二个函数 add(4,5,6); //调用第三个函数 } public static int add(int a,int b) { return a+b; } public static double add(double a,double b) { return a+b; } public static int add(int a,int b,int c) { return a+b+c; } }
如果函数功能相同,则定义成同一个名字即可,用参数列表区分其不同。
重载练习:
打印99乘法表:
class FunctionTest{ public static void main(String[] args) { printCFB(9); printCFB(); } public static void printCFB(int num) { for(int x=1;x<=num;x++) { for(int y=1;y<=x;y++) { System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.println(); } } public static void printCFB(){ printCFB(9); } }
1,概念:同一种类型数据的集合,其实就是一个容器。
好处:自动从0开始编号,方便操作。
格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
例如:int[] arr = newint[5];
格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,...};
例如:int[] arr = newint[]{2,3,4};
int[]arr = {2,3,4};
注意:数组建立是必须明确长度。
Java内存空间的划分一共分为5块:
寄存器:CPU负责处理。
本地方法区:与所在系统相关,运行本地系统平台上的内容。
方法区:加载类中的方法,变量等。
栈内存:运行方法。
堆内存:对象的存放,有地址引用。
1,栈内存:存储的都是局部变量(方法中定义的变量),而且变量所属的作用域一旦结束,该变量就自动释放。
为什么方法要进栈呢?因为局部变量都在方法里,方法不进栈,局部变量就无法进栈。
2,堆内存:
存储的是数组和对象(其实数组就是对象)。凡是new建立的都在堆中。堆里面存实体,实体是存储多个数据的地方。
堆内存特点:
例:int[] arr = new int[3];在内存中的图解:
1,局部变量都在方法里,main函数先进栈。
2,然后数组通过new在堆中建立实体,这时数组进入堆内存。
3,在堆中开辟一片内存空间,里面存放了三个数据,若没有给三个元素赋值,则在堆中给三个元素初始化为0(堆中的数据都有一个默认的初始值)。
若arr = null,即arr为空值,此时不再引用堆中的元素,堆中的数组变为垃圾,Java的垃圾回收机制自动不定时的回收垃圾。
特点:
(1)每一个实体都有一个首地址。
(2)堆内存中的每一个变量都有默认的初始化值,根据类型的不同而不同,整数是0,小数是0.0或0.0f,boolean是false,char是’\u0000’。
(3)垃圾回收机制(释放堆内存)。
1,int[] arr = new int[3];
System.out.println(arrp[3]);
报错:ArrayIndexOutOfBoundsException;
当访问到数组不存在的角标时,就会产生这个异常。
2,int[] arr = new int[3];
arr= null;
System.out.println(arr[0]);
报错:NullPointerException
当引用变量没有任何实体指向时,还在用其操作实体,就会产生该异常。
3,int[] arr = new int[3];
System.out.println(arr);
打印出:[I@C17164
其中:
[:这个代表的是这个实体是一个数组。
I:代表这个数组的元素的类型是int型。
@:源码中用@作为连接两部分的符号。
17164:由windows用哈希算法算出的数组地址值,把二进制的值用十六进制表示。