---------------------- android培训、java培训、期待与您交流! ----------------------
一.语句(while)
循环结构:
代表语句:while , do while , for
1.whie 语句格式:
定义初始化表达式;
while(条件表达式){
执行语句;
}
二.语句(do while)
do while 语句格式:
do{
执行语句;
}while(条件表达式);
while :先判断条件,只有条件满足才执行循环体
do while:先执行循环体,再判断条件,条件满足,再继续执行循环体;
简单一句话:do while 特点是 条件无论是否满足,循环体至少执行一次
三.for语法格式:
for(初始化表达式;条件表达式:循环后的操作表达式){
执行语句l;
}
初始化表达式 只执行一次
只有条件不满足 循环就结束
四.语句(for 和 while 的区别)
1.变量有自己的作用域,对于for来讲,如果将用于控制循环的增量定义在for语句中,
那么该变量只在for语句内有效,for语句执行完毕,该变量在内存中被释放。
2.for 和 while 可以进行互换,如果需要定义循环增量,用for更为合适。
总结:
什么时候使用循环结构?
当要对某些语句执行很多次时,就使用循环结构。
五.语句(循环语句的其他特点)
int x = 1;
for(System.out.println("a");x<3;System.out.print("c")){
System.out.print("d");
x++;
}
运行结果: adcdc
当表达式多的情况下 ,用逗号隔开
int x = 1;
for(System.out.print("a");x<3;System.out.print("c"),x++){
System.out.print("d");
}
无限循环的最简单表现形式:
1.while(true){
}
2.for( ; ; ){
}
六.语句(for语句练习-累加 计数器)
循环注意:
一定要明确哪些语句需要参与循环,哪些不需要
1.获取1~10的和,并打印
int sum = 0;
for(int i = 0 ; i <= 10 ; i++){
sum += i ;
}
System.out.println(sum);
其实这就是累加思想,原理,通过变量记录住每次变化的结果
通过循环的形式,进行累加的动作。
2.1~100之间7的倍数的个数,并打印
int temp = 0 ;
for (int j = 1; j < 101; j++) {
if(j%7 == 0){
temp++;
}
}
System.out.println(temp);
计数器思想:
通过一个变量记录住数据的状态变化,
也需要通过循环完成
七.语句(for 嵌套)
语句嵌套形式:
其实就是语句中还有语句
循环嵌套:
/*
*****
****
***
**
*
发现图形有很多行,每一个行有很多列,
要使用嵌套循环,原理:形象说法:大圈套小圈
定义一个变量来记录 列数的变化
*/
for (int i = 0; i < 5; i++) {//x<5 ; 因为外循环控制行数,一共5行
for (int j = i; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
/****************
尖朝上,可以改变条件,让条件随着外循环变化
尖朝下,可以改变初始化值,让初始化随着外循环变化*/for(int i = 0 ; i < 5 ; i++){for(int j = 0 ; j <= i ; j++){System.out.print("*");}System.out.println();}
/*九九乘法表 */for(int i = 1 ; i <=9 ; i++){for(int j = 1 ; j <=i ; j++){System.out.printf(j+"*"+i+"="+i*j+"\t");}System.out.println();}八.语句(break-continue)
break(跳出),continue(继续)
break语句:应用范围:选择结构(switch)和循环结构(for)
break跳出的是它所在循环 当前循环
continue语句:应用于循环结构
注:
a这两个语句离开应用范围,存在是没有意义的。
b.这两个语句单独存在,下面都不可以有语句,因为执行不到。
c.continue语句是结束本次循环继续下次循环
d.标号的出现,可以让这两个语句作用指定的范围
for (int i = 0; i < 3; i++) {i=0
for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
break;
}
}
i=1
i=2
W:for (int i = 0; i < 3; i++) {i=0
Q:for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
break W;
}
}
for(int i = 0 ; i <= 10 ; i++){
if(i%2 == 1)continue;
System.out.println("i="+i);
}
i=0
i=2
i=4
i=6
i=8
i=10
W:for (int i = 0; i < 3; i++) {i=0
Q:for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
continue W;
}
}
i=1
i=2
/*
*
* *
* * *
* * * *
* * * * *
*/
for (int i = 0; i < 5; i++) {
for (int j = i+1; j < 5; j++) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
九.函数(概述)
1.函数的定义:
函数就是定义在类中的具有特定功能的一段小程序
函数也称方法
2.函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2...){
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
实际参数:传递给形式参数的具体数值。
return:用于结束函数
返回值:该值会返回给调用者。
2.函数的特点:
定义函数可以将功能代码进行封装
便于对该功能进行复用
函数只有被调用才会被执行
函数的出现提高了代码的复用性
对于函数没有具体返回值的情况,返回值类型用关键字void表示,
那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数
定义函数时,函数的结果应该返回给调用者,交由调用者处理
十.函数(应用)
主函数的目的 只有一个 就是调用函数
如何定义个函数呢 ?
1.既然函数是一个独立的功能,那么该功能的运算结果是什么先明确
因为是在明确函数的返回值类型
2.在明确的定义该功能的过程中是否需要未知的内容参与运算。
因为是在明确函数的参数列表(参数的类型,参数的个数)
返回值类型为void时,不能作为打印语句
提高复用性 函数的最基本体现
十一.函数(重载)Overload
重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可
重载的特点:
与返回值类型无关,只看参数列表
重载的好处:
方便于阅读,优化了程序设计
重载示例:
//返回两个整数的和
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;}
重载只和参数列表有关系
什么时候用重载?
当定义的功能相同 但参与运算的未知内容不同,
那么,这时就定义个一函数名称以表示该功能,方便阅读,而通过参数列表的不同
来区分多个同名函数
十二.数组(概述-内存结构)
数组的定义:
概念:
同一种类型数据的集合,其实数组就是一个容器
数组的好处:
可以自动的为数组中的元素从0开始编号,方便操作这些元素
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,。。。};
示例:
int [] arr = new int[]{3,5,3,1};
int[] arr = {3,4,5,6};
new关键字 用来在内存中产生一个容器实体
内存结构
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分
因为每一片区域都有特定的处理数据方式和内存管理方式。
1.栈(Zhan)内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
数据使用完毕,会自动释放。
2.堆内存
数组和对象,通过new建立的实例都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值(int 0 double 0.0 float 0.0f boolean false)
实体不再被使用,会在不确定的时间内被垃圾回收器回收。
3.方法区
本地方法区
寄存器
凡是局部变量 都在栈内存里 什么是局部变量呢 ?
定义在方法中的变量,
定义在方法中的参数的变量
定义在for循环里的变量
全都是局部的
堆内存 用于存放实体
实体包括 数组和对象
堆内存中 每一个实体 都有一个内存地址值
只有引用数据类型 才可以使用 null x=null;
当一个实体在堆内存中没有任何引用 所使用它 java虚拟机就视为垃圾 这个垃圾不会立即被内存中清除掉
而是在不定时的时间内 启动一个垃圾回收机制 将这个实体在堆内存中清除
Java的垃圾回收机制
Java语言本身成长至C++,它优化了C++语言的一些特性,而变得更简单易学易用,尤其在内存这一块,它的优化要比C++做的好
C++的语言特点在于,我们写了很多的程序,运行的时候,会在内存中开辟空间。当内存中的实体越来越多的时候,比较占用内存空间
哪一个实体不用了 需要将其清除 ,C++的做法是,由程序员去手动的调用一个功能,将内存中的这一部分数据清除掉。
如果程序员忘做了,这个程序运行会越来越慢,甚至到最后会死机。
而Java将其优化,一旦这个对象不再使用,变成垃圾,虚拟机就会自动的去启动垃圾回收机制,将堆内存中,不再被使用的实体清除掉。
不一定会马上执行,会在不定时的时候进行。
堆内存的三个特点:
1.内存地址值
2.默认初始化值
3.垃圾回收机制
栈和堆的不同
栈自动释放 堆 垃圾回收