Java语言是一种高级、并发、面向对象的计算机编程语言,由Sun Microsystems公司于1995年推出。Java广泛应用于Web应用程序开发、移动应用程序开发以及大型企业级应用程序的开发中。Java语言具有跨平台、安全性好、可移植性强、易学易用等优点,在业界得到了广泛的应用和认可。
支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,此版本以前称为J2SE
是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet 、Jsp等,主要针对于Web应用程序开发。版本以前称为J2EE
支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME
Java中的注释分为三种:
// 这是单行注释文字
/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
注意:多行注释不能嵌套使用。
/**
* @author 指定java程序的作者**
* @version 指定源文件的版本**
*/
如果我们要对代码进行解释,那么就可以使用注释,当注释的内容比较少,一行就写完了,可以用单行注释。
如果注释的内容比较多,需要写在多行,那么可以使用多行注释。
注释的内容不会参与编译和运行的,仅仅是对代码的解释说明而已。
所以,不管在注释当中写什么内容,都不会影响代码运行的结果。
被Java赋予了特定含义的英文单词。我们在代码中写了关键字之后,程序在运行的时候,就知道要做什么事情了。
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
作用:告诉程序员,数据在程序中的书写格式。
字面量类型 | 说明 | 程序中的写法 |
---|---|---|
整数 | 不带小数的数字 | 666,-88 |
小数 | 带小数的数字 | 13.14,-5.21 |
字符 | 必须使用单引号,有且仅能一个字符 | ‘A’,‘0’, ‘我’ |
字符串 | 必须使用双引号,内容可有可无 | “HelloWorld”,“黑马程序员” |
布尔值 | 布尔值,表示真假,只有两个值:true,false | true 、false |
空值 | 一个特殊的值,空值 | 值是:null |
public class Demo {
public static void main(String[] args) {
System.out.println(10); // 输出一个整数
System.out.println(5.5); // 输出一个小数
System.out.println('a'); // 输出一个字符
System.out.println(true); // 输出boolean值true
System.out.println("欢迎来到黑马程序员"); // 输出字符串
}
}
区分技巧
变量就在程序中临时存储数据的容器。但是这个容器中只能存一个值。
数据类型 变量名 = 数据值;
public class VariableDemo{
public static void main(String[] args){
//定义一个整数类型的变量
//数据类型 变量名 = 数据值;
int a = 16;
System.out.println(a);//16
//定义一个小数类型的变量
double b = 10.1;
System.out.println(b);//10.1
}
}
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字符 | char | 2 | 0-65535 |
布尔 | boolean | 1 | true,false |
public class VariableDemo3{
public static void main(String[] args){
//1.定义byte类型的变量
//数据类型 变量名 = 数据值;
byte a = 10;
System.out.println(a);
//2.定义short类型的变量
short b = 20;
System.out.println(b);
//3.定义int类型的变量
int c = 30;
System.out.println(c);
//4.定义long类型的变量
long d = 123456789123456789L;
System.out.println(d);
//5.定义float类型的变量
float e = 10.1F;
System.out.println(e);
//6.定义double类型的变量
double f = 20.3;
System.out.println(f);
//7.定义char类型的变量
char g = 'a';
System.out.println(g);
//8.定义boolean类型的变量
boolean h = true;
System.out.println(h);
}
}
/*
Java定义的数据类型
*/
class VariableTest1{
public static void main(String[] args) {
//1. 整型:byte(1字节=8bit) short(2字节) \ int (4字节)\ long(8字节)
//① byte范围:-128 ~ 127
byte b1 = 12;
byte b2 = -128;
// b2 = 128; //编译不通过
System.out.println(b1);
System.out.println(b2);
// ② 声明long型变量,必须以“1”或“L”结尾
short s1 = 128;
int i1 = 12345;
long l1 = 345678586;
System.out.println(l1);
//2. 浮点型:float(4字节) \ double(8字节)
//① 浮点型,表示带小数点的数值
//② float表示数值的范围比long还大
double d1 = 12.3;
System.out.println(d1 +1);
//定义float类型变量时,变量要以"f" 或"F"结尾
float f1 = 12.3F;
System.out.println(f1);
//② 通常,定义浮点型变量时,使用double变量
//3. 字符型:char(1字符=2字节)
//① 定义char型变量,通常使用一对''
char c1 = 'a';
//编译不通过
//c1 = 'AB';
System.out.println(c1);
char c2 = '1';
char c3 = '中';
char c4 = '&';
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
//② 表示方式:1.声明一个字符;2.转义字符;3.直接使用Unicode值来表示字符型常量
char c5 = '\n'; //换行符
c5 = '\t'; //制表符
System.out.print("hello" + c5);
System.out.println("world");
char c6 = '\u0123';
System.out.println(c6);
char c7 = '\u0043';
System.out.println(c7);
}
}
ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)是一套基于拉丁字母的字符编码系统,共收录了128个字符,用一个7位二进制数(即一个字节的最高位为0)就可以表示。ASCII码最早于1963年制定,而后经过多次修改和更新,最后一次更新是在1986年。ASCII码被广泛应用于计算机、通讯和其他设备中,用于表示文本字符和控制字符。由于当时计算机系统技术的局限性,ASCII码只有128个字符编码点,其中只有95个是可打印字符,严重限制了其功能的使用范围。
即ASCII 码特点如下所示:
Unicode编码是一种国际编码标准,用于为全世界各种语言、符号、符号系统中的所有字符分配一个独特的数字编号和名称。Unicode编码允许计算机处理和表示多种语言的文本字符,包括亚洲文字、古典希腊语、古老的符号和图表等。
相比较ASCII编码,Unicode编码可以支持更多的字符集和编码方式,因此在现代的计算机系统中被广泛应用。例如,在使用不同的语言进行编程、进行国际化文本处理时,使用Unicode编码能够更加方便和简单。同时,由于Unicode编码已成为国际标准,它也解决了不同计算机系统间交换文本文件时由于编码问题造成的混乱、错乱、丢失等问题。
即Unicode 编码特点如下所示:
UTF-8是一种可变长度的字符编码标准,用于电子通讯。它是由Unicode标准定义的,名称来源于 Unicode (或通用字符集) 转换格式 - 8位 。UTF-8 可以使用1到4个字节(8位)的代码单元来编码Unicode中的1,112,064个有效字符代码点。UTF-8能够表示Unicode标准中的任何字符,并且具有与ASCII的向后兼容性。
即Unicode 编码特点如下所示:
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
/*
基本数据类型之间的运算规则:
前提:这里讨论只是7中基本数据类型变量的运算。不包含boolean类型的。
1. 自动类型提升:
当容量小的数据类型的变量和容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
char、byte、short-->int-->long-->float-->double
特别的:当byte、char、short三种类型的变量做运算时,结果为int类型
2. 强制类型转换:
说明:此时容量大小指的是,表示数的范围的大和小。比如:float容量要大于long的容量
*/
class VariableTest2{
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
// 编译不通过
// byte b2 = b1 + i1;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
System.out.println(l1);
float f = b1 + i1;
System.out.println(f);
//***************特别的**************************
char c1 = 'a'; //97
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);
short s2 = 10;
// 编译错误
// char c3 = c1 + s2;
byte b2 = 10;
// char c3 = c1 + b2; //编译不通过
// short s3 = b2 + s2; //编译不通过
// short s4 = b1 + b2; //编译不通过
}
}
class VariableTest4{
public static void main(String[] args){
//1. 编码情况
long l = 123456;
System.out.println(l);
//编译失败:过大的整数
//long l1 = 452367894586235;
long l1 = 452367894586235L;
//**************************
//编译失败
// float f1 = 12.3;
//2. 编码情况2:
//整型变量,默认类型为int型
//浮点型变量,默认类型为double型
byte b = 12;
// byte b1 = b + 1; //编译失败
// float f1 = b + 12.3; //编译失败
}
}
String a = “43”; inti= Integer.parseInt(a);
二进制是一种使用数字0和1表示数值和信息的计数系统和信息处理方法。它在数学和计算机科学中广泛使用。在二进制系统中,每个数字位都只能为0或1。它是一种基于2的数字系统,与我们通常使用的十进制数字系统不同。二进制被广泛用于计算机科学,因为现代计算机将所有数据都存储在二进制形式下,并使用二进制代码来处理和传输数据。二进制可以通过简单的移位和逻辑运算进行处理,因此在计算机中表现出色。
因此,采用原码、反码、补码表示形式,可以使计算机的运算更加高效和准确,也便于理解和处理整数的计算。
两个数相加,其实就是两个整数的补码相加,原码与反码是帮助推导出补码而存在的,计算机底层都是使用的数值的补码保存数据的。在两个整数相加的本质都是在计算它们的补码之和。在补码表示法中,一个数的反码就是对其取反(0变1,1变0),补码等于其反码加1。所以,计算机加法运算中不需要区分正负数,而是将参与运算的两个数的补码按位相加,并且需要最后将结果的补码转换回原码得到正确的结果。
二进制转成十进制乘以2的幂数
例如,二进制数 1011 转换为十进制数的步骤如下:
十进制转成二进制除以2取余数,余数倒序排列
一个简单的例子是将十进制数13转换为二进制数。步骤如下:
因此,十进制数13转换为二进制数为1101。
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
层级关系 :project - module - package - class
project(项目、工程):淘宝、京东都属于一个个项目,IDEA中就是一个个的Project。
module(模块):在一个项目中,可以存放多个模块,不同的模块可以存放项目中不同的业务功能代码。例如商品模块、用户模块。为了更好的管理代码,我们会把代码分别放在两个模块中存放。
package(包): 一个模块中又有很多的业务,以用户网站的论坛模块为例,至少包含了以下不同的业务。例如个人信息、订单信息等。为了把这些业务区分的更加清楚,就会用包来管理这些不同的业务。
class(类):就是真正写代码的地方。
包含数量
运算符:就是对常量或者变量进行操作的符号。比如: + - * /
表达式:用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式。比如:a + b 这个整体就是表达式。而其中+是算术运算符的一种,所以这个表达式也称之为算术表达式
/*
运算符之一:算术运算符
+ - * / % (前)++ (后)++ (前)-- (后)--
*/
class Day3Test{
public static void main(String[] args) {
//除号:/
int num1 = 12;
int num2 = 5;
int resule1 = num1 / num2;
System.out.println(resule1); //2
int result2 = num1 / num2 * num2;
System.out.println(result2);
double result3 = num1 / num2;
System.out.println(result3); //2.0
double result4 = num1 / num2 + 0.0; //2.0
double result5 = num1 / (num2 + 0.0); //2.4
double result6 = (double)num1 / num2; //2.4
double result7 = (double)(num1 / num2); //2.0
System.out.println(result5);
System.out.println(result6);
// %:取余运算
//结果的符号与被模数的符号相同
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);
int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = " + m2 % n2);
int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = " + m3 % n3);
int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = " + m4 % n4);
//(前)++ : 先自增1,后运算
//(后)++ :先运算,后自增1
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10;
a3++; //a3++;
int b3 = a3;
//注意点:
short s1 = 10;
//s1 = s1 + 1; //编译失败
// s1 = (short)(s1 + 1); //正确的
s1++; //自增1不会改变本身变量的数据类型
System.out.println(s1);
//问题:
byte bb1 = 127;
bb1++;
System.out.println("bb1 = " + bb1);
//(前)-- :先自减1,后运算
//(后)-- :先运算,后自减1
int a4 = 10;
int b4 = a4--; //int b4 = --a4;
System.out.println("a4 = " + a4 + ",b4 = " + b4);
}
}
/*
练习:随意给出一个三位数的整数,打印显是它的个位数,十位数,百位数的值。
例如:
数字153的情况如下:
个位数:3
十位数:5
百位数:1
公式:
获取任意一个数上每一位数。
个位:数字 % 10
十位:数字 / 10 % 10
百位:数字 / 100 % 10
千位:数字 / 1000 % 10
。。。以此类推。。。
*/
class AriExer{
public static void main(String[] args){
int num = 187;
System.out.println("百位数:" + num/100);
System.out.println("十位数:" + num%100/10);
System.out.println("个位数:" + num%10);
}
}
运算过程:就是把等号右边的结果赋值给左边的变量
public class OperatorDemo6 {
public static void main(String[] args) {
//1.最为简单的赋值运算符用法
int a = 10;//就是把10赋值给变量a
System.out.println(a);
//2.如果等号右边需要进行计算。
int b = 20;
int c = a + b;//先计算等号右边的,把计算的结果赋值给左边的变量
System.out.println(c);
//3.特殊的用法
a = a + 10;//先计算等号右边的,把计算的结果赋值给左边的变量
System.out.println(a);//20
//扩展赋值运算符
int a = 10;
int b = 20;
a += b;//把左边和右边相加,再把最终的结果赋值给左边,对右边没有任何影响,a += b ;实际上相当于 a = (byte)(a + b);
// 相当于 a = a + b;
System.out.println(a);//30
System.out.println(b);//20
}
}
又叫比较运算符,其实就是拿着左边跟右边进行了判断而已。
符号 | 解释 |
---|---|
== | 就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false |
!= | 就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false |
> | 就是判断左边是否大于右边,如果成立就是true,如果不成立就是false |
>= | 就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false |
< | 就是判断左边是否小于右边,如果成立就是true,如果不成立就是false |
<= | 就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false |
/*
运算符之三:比较运算符
== != > < >= <= instanceof
结论:
1.比较运算符的结果是boolean类型
2.区分 == 和 =
*/
class CompareTest{
public static void main(String[] args){
int i = 10;
int j = 20;
System.out.println(i==j); //false
System.out.println(i = j); //20
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1); //false
System.out.println(b2 = b1); //true
}
}
&
—逻辑与|
—逻辑或!
—逻辑非&&
—短路与||
—短路或^
—逻辑异或/*
运算符之四:逻辑运算符
& && | || ! ^
说明:
1. 逻辑与运算符操作的都是boolean类型的变量
*/
class LogicTest{
public static void main(String[] args){
//区分& 与 &&
//相同点1:& 与 && 的运算结果都相同
//相同点2:当符号左边是true时,二者都会执行符号右边的运算
//不同点:当符号左边是false时,&继续执行符号
//开发中,推荐使用&&
boolean b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在南京");
}else{
System.out.println("我现在在北京");
}
System.out.println("num1 = " + num1);
boolean b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
System.out.println("我现在在南京");
}else{
System.out.println("我现在在北京");
}
System.out.println("num2 = " + num2);
//区分:| 与 ||
//相同点1:| 与 || 的运算结果都相同
//相同点2:当符号左边是false时,二者都会执行符号右边的运算
//不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
//开发中,推荐使用||
boolean b3 = true;
int num3 = 10;
if(b3 | (num3++ > 0)){
System.out.println("我现在在南京");
}else{
System.out.println("我现在在北京");
}
System.out.println("num3 = " + num3);
boolean b4 = true;
int num4 = 10;
if(b4 || (num4++ > 0)){
System.out.println("我现在在南京");
}else{
System.out.println("我现在在北京");
}
System.out.println("num4 = " + num4);
}
}
位运算是直接对整数的二进制进行的运算
/*
运算符之五:位运算符(了解)
结论:
1.位运算符操作的都是整型的数据变量
2.<< : 在一定范围内,每向左移一位,相当于 * 2
>> : 在一定范围内,每向右移一位,相当于 / 2
面试题:最高效的计算2 * 8 ? 2 << 3 或 8 << 1
*/
class BitTest{
public static void main(String[] args){
int i = 21;
// i = -21;
System.out.println("i << 2 :" + (i << 2));
System.out.println("i << 3 :" + (i << 3));
System.out.println("i << 20 :" + (i << 20));
System.out.println("i << 27 :" + (i << 27));
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));
System.out.println("m & n :" + (m | n));
System.out.println("m & n :" + (m ^ n));
//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;
//方式一:
// int tent = num1;
// num1 = num2;
// num2 = tent;
//方式二:
//好处:不用定义临时变量
//弊端:①相加可能超出存储范围 ② 有局限性:只适用于数值类型
// num1 = num1 + num2;
// num2 = num1 - num2;
// num1 = num1 - num2;
//方式三:使用位运算
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println("num1 = " + num1 + ",num2 = " + num2);
}
}
/*
运算符之六:三元运算符
1.结构:(条件表达式)?表达式1 : 表达式2
2. 说明
① 条件表达式的结果为boolean类型
② 根据条件表达式真或假,决定执行表达式1,还是表达式2.
如果表达式为true,则执行表达式1
如果表达式为false,则执行表达式2
③ 表达式1 和表达式2要求是一致的。
④ 三元运算符是可以嵌套的
3. 凡是可以使用三元运算的地方,都是可以改写if-else。
反之,则不一定成立!!!
*/
class SanTest{
public static void main(String[] args) {
//获取两个整数的最大值
int m = 12;
int n = 5;
int max = (m > n)? m : n;
System.out.println(max);
double num = (m > n) ? 2 : 1.0;
//(m > n) ? 2 : "n大"; //编译错误
//****************************************
String str = (m > n) ? "m大" : ((m == n)? "m和n相等" : "n大");
System.out.println(str);
//****************************************
//获取三个数中的最大值
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2) ? n1 : n2;
int max2 = (max1 > n3) ? max1 : n3;
System.out.println("三个数中的最大值是:" + max2);
//此方法:pass
int max3 = (((n1 > n2)? n1 : n2) > n3) ?((n1 > n2) ? n1 : n2) : n3;
System.out.println("三个数中的最大值是:" + max3);
//改写成if-else
if(m > n){
System.out.println(m);
}else{
System.out.println(n);
}
}
}
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
程序从上到下逐行地执行,中间没有任何判断和跳转。
根据条件,选择性地执行某段代码。有if…else和switch-case两种分支语句。
格式:
if (关系表达式) {
语句体;
}
执行流程:
public class IfDemo {
public static void main(String[] args) {
System.out.println("开始");
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if(a == b) {
System.out.println("a等于b");
}
//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
int c = 10;
if(a == c) {
System.out.println("a等于c");
}
System.out.println("结束");
}
}
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
public class IfDemo02 {
public static void main(String[] args) {
System.out.println("开始");
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
if(a > b) {
System.out.println("a的值大于b");
} else {
System.out.println("a的值不大于b");
}
System.out.println("结束");
}
}
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
//95~100 自行车一辆
//90~94 游乐场玩一天
//80 ~ 89 变形金刚一个
//80 以下 胖揍一顿
//1.键盘录入一个值表示小明的分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的成绩");
int score = sc.nextInt();
//2.对分数的有效性进行判断
if(score >= 0 && score <= 100){
//有效的分数
//3.对小明的分数进行判断,不同情况执行不同的代码
if(score >= 95 && score <= 100){
System.out.println("送自行车一辆");
}else if(score >= 90 && score <= 94){
System.out.println("游乐场玩一天");
}else if(score >= 80 && score <= 89){
System.out.println("变形金刚一个");
}else{
System.out.println("胖揍一顿");
}
}else{
//无效的分数
System.out.println("分数不合法");
}
switch (表达式) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
/**
*
需求:键盘录入星期数,显示今天的减肥活动。
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
**/
public class SwitchDemo2 {
public static void main(String[] args) {
//1.键盘录入一个整数表示星期
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示星期");
int week = sc.nextInt();
//2.书写一个switch语句去跟week进行匹配
switch (week){
case 1:
System.out.println("跑步");
break;
case 2:
System.out.println("游泳");
break;
case 3:
System.out.println("慢走");
break;
case 4:
System.out.println("动感单车");
break;
case 5:
System.out.println("拳击");
break;
case 6:
System.out.println("爬山");
break;
case 7:
System.out.println("好好吃一顿");
break;
default:
System.out.println("输入错误,没有这个星期");
break;
}
}
}
注意: switch结构中的表达式,只能是如下的六种数据类型之一:byte、short、char、int、枚举类型(JDK5.0)、String类型(JDK7.0) ,不能是:long,float,double,boolean。
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
执行流程:
//需求:打印5次HelloWorld
//开始条件:1
//结束条件:5
//重复代码:打印语句
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld");
}
初始化语句;
while(条件判断语句){
循环体;
条件控制语句;
}
/*
While循环结构的使用
一、循环结构的四个要素
① 初始化条件
② 循环条件
③ 循环体
④ 迭代条件
二、while循环的结构
①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
执行过程: ① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
说明:
1.写while循环千万要小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
2.写程序要避免死循环。
3.能用while循环的,可以用for循环,反之亦然。二者可以相互转换。
区别:for循环和while循环的初始化条件部分的作用范围不同。
算法:有限性。
*/
class WhileTest{
public static void main(String[] args){
//遍历100以内的所有偶数
int i = 1;
while(i <= 100){
if(i % 2 == 0){
System.out.println(i);
}
i++;
}
}
}
do-while循环结构的使用
一、循环结构的四个要素
① 初始化条件
② 循环条件 --->是boolean类型
③ 循环体
④ 迭代条件
二、do-while循环的结构
①
do{
③;
④;
}while(②);
执行过程:① - ③ - ④ - ② - ① - ③ - ④ - ... - ②
说明:do-while循环至少执行一次循环体。
class DoWhileTest{
public static void main(String[] args){
//遍历100以内的所有偶数,并计算所有偶数的和和偶数的个数
int number = 1;
int sum = 0; //记录总和
int count = 0; //记录个数
do{
if(number % 2 == 0){
System.out.println(number);
sum += number;
count++;
}
number++;
}while(number <= 100);
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
//*********************************
int numb = 10;
while(numb > 10){
System.out.println("hello:while");
numb--;
}
int numb2 = 10;
do{
System.out.println("hello:do-while");
numb2--;
}while(numb2 > 10);
}
}
break: 不能单独存在的。可以用在switch和循环中,表示结束,跳出的意思。
//1.吃1~5号包子
for (int i = 1; i <= 5; i++) {
System.out.println("在吃第" + i + "个包子");
//2.吃完第三个的时候就不吃了
if(i == 3){
break;//结束整个循环。
}
}
continue: 不能单独存在的。只能存在于循环当中,表示:跳过本次循环,继续执行下次循环。
//1.吃1~5号包子
for (int i = 1; i <= 5; i++) {
//2.第3个包子有虫子就跳过,继续吃下面的包子
if(i == 3){
//跳过本次循环(本次循环中,下面的代码就不执行了),继续执行下次循环。
continue;
}
System.out.println("在吃第" + i + "个包子");
}