黑马程序员——第三天(Java基础语法2)

时间:2023-02-15 19:43:33

---------------------- 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++) {
for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
break;
}
}
i=0
i=1
i=2
W:for (int i = 0; i < 3; i++) {
Q:for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
break W;
}
}
i=0
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++) {
Q:for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
continue W;
}
}
i=0
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循环里的变量

全都是局部的   


堆内存 用于存放实体

实体包括 数组和对象  


堆内存中  每一个实体 都有一个内存地址值 

黑马程序员——第三天(Java基础语法2)

只有引用数据类型  才可以使用  null     x=null;

当一个实体在堆内存中没有任何引用 所使用它  java虚拟机就视为垃圾   这个垃圾不会立即被内存中清除掉 

而是在不定时的时间内 启动一个垃圾回收机制   将这个实体在堆内存中清除


Java的垃圾回收机制

Java语言本身成长至C++,它优化了C++语言的一些特性,而变得更简单易学易用,尤其在内存这一块,它的优化要比C++做的好

C++的语言特点在于,我们写了很多的程序,运行的时候,会在内存中开辟空间。当内存中的实体越来越多的时候,比较占用内存空间

哪一个实体不用了  需要将其清除 ,C++的做法是,由程序员去手动的调用一个功能,将内存中的这一部分数据清除掉。

如果程序员忘做了,这个程序运行会越来越慢,甚至到最后会死机。

而Java将其优化,一旦这个对象不再使用,变成垃圾,虚拟机就会自动的去启动垃圾回收机制,将堆内存中,不再被使用的实体清除掉。

不一定会马上执行,会在不定时的时候进行。

堆内存的三个特点:

1.内存地址值

2.默认初始化值

3.垃圾回收机制


栈和堆的不同

栈自动释放   堆  垃圾回收


---------------------- android培训java培训、期待与您交流! ----------------------