第一章 知识结构图
java的运行机制
java语言由什么级别构成
第二章 Java编程基础
选择结构
else 小于等于0
不考继承和接口
快捷键
java的注释
java程序的基本设计
Java的常量
string
温故知新
Part1 循环
回顾
首先我们先来回顾一下Java编程中常见的循环类型
for循环 while循环 do while循环
while循环
简介
while循环语句与选择结构语句类似,都是根据判断条件决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。 |
---|
语法结构
while循环语句的语法结构如下: while(循环条件){ 执行语句 … } ![]() 在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕,程序继续判断循环条件,如果条件仍为true则继续执行循环体,直到循环条件为false时,整个循环过程才会结束。 |
---|
举个栗子
public class whilecontinue
public static void main(String[] args) {
int x = 1; // 定义变量x,初始值为1
while (x <= 4) { // 循环条件
System.out.println("x = " + x); // 条件成立,打印x的值
x++; // x进行自增
}
}
}
输出结果如下
上述代码中,第3行代码定义了变量x,初始值为1。在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x自增。 由运行结果可知,打印结果中x的值分别为1、2、3、4。需要注意的是,文件中第6行代码在每次循环时改变变量x的值,从而达到最终改变循环条件的目的。 如果没有这行代码,x的值一直为1,整个循环会进入无限循环的状态,永远不会结束。 |
---|
do while循环
do…while循环语句和while循环语句功能类似,语法结构如下: do { 执行语句 … }while(循环条件); ![]() 在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件决定是否继续执行。 |
---|
do-while循环的与for循环,while循环的区别:(了解即可,考试不考)
一、循环结构的表达式不同
do-while循环结构表达式为:do{循环体;}。
for循环的结构表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。
while循环的结构表达式为:while(表达式){循环体}。
二、执行时判断方式不同
do-while循环将先运行一次,因为经过第一次do循环后,当检查条件表达式的值时,其值为 不成立时而会退出循环。保证了至少执行do{ }内的语句一次。
for循环执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略,执行完中间循环体后接着执行末尾循环体。
while循环执行时当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出(而不是立即跳出循环)。
三、执行次数不同
do-while循环是先执行后判断,执行次数至少为一次。
for循环是先判断后执行,可以不执行中间循环体。
while循环也是先判断后执行,可以不执行中间循环体。
四、执行末尾循环体的顺序不同
do-while循环是在中间循环体中加入末尾循环体,并在执行中间循环体时执行末尾循环体。
for循环的中间循环体在条件判断语句里,执行末尾循环体后自动执行中间循环体。
while循环的末尾循环体也是在中间循环体里,并在中间循环体中执行。
说了那么多干货(废话)
现在开始实战啦
Easy篇 For循环
使用for循环输出五下hello
public static void main(String[] args) {
for (int i = 1;i <= 5 ;i++ ) {
System.out.println("hello");
}
}
- Problem Variant
使用while循环输出呢? 如果我只想输出4行“hello”呢? 如果我想使用其它的循环类型呢?
这个时候应该怎么做呢?请开动脑筋认真思考喔
中等难度 Java算法(循环向)
for循环(最简单)
Q:求解1-100之间的所有奇数和
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i += 2) {
sum += i;
}
System.out.println("1到100的奇数和为:" + sum);
}
求解1-100之间的所有偶数和
public static void main(String[] args) {
int sum = 0;
for (int i = 2; i <= 100; i += 2) {
sum += i;
}
System.out.println("1到100的偶数和为:" + sum);
}
使用while循环
// 1-100 while循环实现1-100之间的奇数和 。
//1+3+5+7+。。。+99
public class ClassWork2 {
public static void main(String[] args) {
int i=0;
int a=0;
while(i<=100) {
System.out.println(i);
a=a+i;//得到前i项和,i=3,5,8...
i+=2;// i 变化每次加上2
}
System.out.println(a);
System.out.println("========");
int j=1;
int sum2=0;
while(j<=100) {
if(j%2!=0) {//if选择 满足对2取余不等于0 奇数
sum2=sum2+j;
}
j+=1;
}
System.out.println(sum2);
}
}
- Problem Variant
那么求解1-100的所有数字和呢? 使用其他方法呢? 我想要把所有的数字输出到屏幕再求和呢?
Part 3
Dog类,属性有姓名,学号,成员方法有study
调用方法分为有参构造和无参构造
class Dog{
private String name,color;
private int age;
public Dog(String name,String color,int age){
this.name=name;
this.color=color;
this.age=age;
}
public void print(){
System.out.println("名字:"+name+" 颜色:"+color+" 年龄:"+age+"岁");
}
}
public class DogTest{
public static void main(String args[]){
Dog d=new Dog("哈士奇","白色",5);
d.print();
}
}
Part4 Java输出九九乘法表
public static void main(String[] args) {
for(int i=1,j=1;j<=9;i++){
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j){
i=0;
j++;
System.out.println();
}
}
}
- Problem Variant
还可以使用其它的方法吗? 答案是,当然有!!!
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
//其中\t为转义字符,表示调到下一个制表符的位置,相当于Tab键
}
System.out.println();
}
}
public static void main(String[] args) {
int i = 9,j = 9;//定义整形变量
while(i >= 1) {//当变量i大于或者等于1的时候执行循环
while (j<=i && j>0) {
System.out.print(i+"*"+j+"="+i*j+" ");
j--;
}
System.out.println(" ");
i--;
j = i;
}
}
关键字,标识符,3%-2取余,b=++a ,三元运算符,byte有多少位,for循环,byte取值范围,java有多少种基本数据类型,根类object,xx.java>xx.class原理
Java关键字和标识符
50个关键字
abstract | continue | for | new | switch |
---|---|---|---|---|
assert | default | goto | package | synchronized |
boolean | do | if | private | this |
break | double | implements | protected | throw |
byte | else | import | public | throws |
case | enum | instanceof | return | transient |
catch | extends | int | short | try |
char | final | interface | static | void |
class | finally | long | strictfp | volatile |
const | float | native | super | while |
备注
Java 语言目前定义了 51 个关键字,这些关键字不能作为变量名、类名和方法名来使用。以下对这些关键字进行了分类。
- 数据类型:boolean(布尔常量)、int(整数类型)、long(长整数)、short(短整数)、byte(字节 【1个字节由8位2进制构成】)、float、double、char、class、interface(接口)。
- 流程控制:if(如果【用于条件】)、else(或者【用于条件】)、do、while、for、switch(条件选择)、case、default、break、continue、return(用于返回方法指定类型的值并结束方法)、try、catch、finally。
- 修饰符:public(公开的)、protected(受保护的)、private(私有的)、final、void、static、strict、abstract、transient、synchronized、volatile、native。
- 动作:package(声明包)、import(导入包)、throw、throws、extends、implements、this(可以指自己,也可以调用名字)、super(调用父类和构造方法)、instanceof、new(新建,一般用于造对象,像猫的属性,年龄。。。)。
- 保留字:true、false、null、goto、const。
提示:由于 Java 区分大小写,因此 public 是关键字,而 Public 则不是关键字。但是为了程序的清晰及可读性,要尽量避免使用关键字的其他形式来命名。
编写Java程序时,需要注意以下几点:
(1)所有的关键字都是小写的。
(2)不能使用关键字命名标识符。
(3)const和goto是保留字关键字,虽然在Java中还没有任何意义,但在程序中不能用来作为自定义的标识符。(这条暂时不用记住)
(4)true、false和null虽然不属于关键字,但它们具有特殊的意义,也不能作为标识符使用。
Java标识符(规则!!!)
标识符
定义
Java语言中,对于方法,变量,常量,函数,语句块,或其他用户定义项所定义的名称
,它们都有自己独一无二的名字,我们统统称之为Java标识符
.
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下。
- 标识符由数字(0~9)和字母(A~Z 和 a~z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)。
- 标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线。
另外,Java 区分大小写,因此 myvar 和 MyVar 是两个不同的标识符。
提示:标识符命名时,切记不能以数字开头,也不能使用任何 Java 关键字作为标识符,而且不能赋予标识符任何标准的方法名。
标识符分为两类,分别为关键字和用户自定义标识符。
- 关键字是有特殊含义的标识符,如 true、false 表示逻辑的真假。
- 用户自定义标识符是由用户按标识符构成规则生成的非保留字的标识符,如 abc 就是一个标识符。
提示:使用标识符时一定要注意,或者使用关键字,或者使用自定义的非关键字标识符。此外,标识符可以包含关键字,但不能与关键字重名(区分大小写)。
例如以下合法与不合法标识符。
- 合法标识符:date、$2011、date、D$date 等。
- 不合法的标识符:123.com、2com、for、if 等。
字节byte数量
byte(8位二进制数=1字节) short(2字节=16位二进制数) int(4字节)默认 long(8字节)
在GBK编码模式中,1个英文字符占用1字节,一个汉字占用2字节。
byte字节取值范围为-27~27-1(或者填写-128到+127)
引申(了解即可)
byte范围:-128 到 127 原因 : 在计算机内,定点数有3种表示法:原码、反码和补码 原码 :二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码 :正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码 :正数的补码与其原码相同;负数的补码是在其反码的末位加1。Java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。 正数补码为其本身;
负数补码为其绝对值各位取反加1;例如:
+21,其二进制表示形式是00010101,则其补码同样为00010101
-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011
得出范围的步骤:
1、byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111
十进制表示形式为127
2、最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)
3、10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000
因为负数的补码是其绝对值取反,即10000000为最小负数的绝对值,而10000000的十进制表示是128,所以最小负数是-128
4、由此可以得出byte的取值范围是-128到+127
[