1.单行注释
格式: //注释文字
2.多行注释
格式: /* 注释文字 /
3.文档注释
格式:/* 注释文字 */
注释是一个程序员必须要具有的良好编程习惯。
初学者编写程序可以养成习惯:先写注释再写代码。
将自己的思想通过注释先整理出来,在用代码去体现。
因为代码仅仅是思想的一种体现形式而已
常量
1、常量概述
在程序执行的过程中其值不可以发生改变
Java中常量分类
2、字面值常量
自定义常量(面向对象部分讲)
字符串常量 用双引号括起来的内容
整数常量 所有整数
12,23
小数常量 所有小数
12.34,56.78
字符常量 用单引号括起来的内容
‘a’,’A’,’0’
布尔常量 较为特有,只有true和false
空常量 null(数组部分讲解)
进制概述
对于整数 有四种表现形式
二进制 0,1 满2进1位
八进制 0,1,2,3,4,5,6,7 满8进1位
十进制 0,1,2,3,4,5,6,7,8,9 满10进1位
十六进制0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 满16进1位
一个整数23 默认为十进制 0x78 =120
以8进制表示 023
以16进制表示0x23
进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制–X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
进制转换
其他进制到十进制
只计算有效位
0101011=十进制的47
在2进制中三个一组最大为的7 111=7
把一个2进制的树排列成三个一组 111 1 000
010 110 011
2 6 3
二进制数010 110 011代表的八进制数为0263
在2进制中四个一组最大为的15 1111=15
把一个2进制的树排列成四个一组
1011 0011
11 3
二进制数010 110 011代表的十六进制数为0xb3
总结:八进制其实就是二进制位 三个二进制位组成一个八进制位
十六进制其实就是二进制位 四个二进制位组成一个十六进制位
负数的二进制表现: -9
原码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
变量
变量是什么?
表示内存中的一个区域,该区域有名称(变量名)和类型(数据的范围)
变量顾名思义:可以变的常量,也就是说 变量可以不断变化的存储同一类型的常量
为什么要使用变量
不断的定义常量 造成内存的浪费 而变量 独自开辟一个内存空间 来接受一些常量的值
定义变量的格式
数据类型 变量名=初始化的值;
int i=123;
改变变量的值:
i=456;
一次性定义多个变量(同一类型)
int i=5,i2=6,i3=7;
格式是固定的
数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
数据类型的分类:
1、基本数据类型
数字类型:
Float为单精度精确到小数点后4位
double为双精度 精确到小数点后13位
注意:
定义long类型与int类型的区别 long类型加L(超过int最大值必须加L)
定义float类型与double类型的区别 float类型加F(必须加F)
默认值:整数类型为int 小数(浮点)类型为double
Boolean布尔类型:
只有两个值:true(真)和false(假)
字符类型char:代表一个单个字符
16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535)。
Java把全世界所有的字符 都给了一个编码 这些编码集合起来叫做Unicode 编码集
数据类型转换:
数值大的类型可以直接接收数据小的类型的值:(自动转换)
int i=123;
long l=i;//l=123;
小数类型可以直接接收整数类型:
long l=123456;
float f=l;//f=123456.0
Char类型和整数类型转换:
转换为当前字符所表示的Unicode码的值
char c=‘A’;
int i=c;//65
强制类型转换:
小类型的数据类型不能直接接收比自己大的数据类型的值:(会报错 即便是可以接收的值)
这种情况下 如果非要这么做 则需要用到强制类型转换:
数据类型 变量名 = (强转的数据类型) 被强转的数据
int i=12;
byte b=(byte)i;//把i强制转换为byte类型 然后赋值给b
注意:强制类型转换如果接收的值超过当前的数据类型的值会出现数据错误:
int i=130;
byte b=(byte)i;//不允许!!!!!
运算符
算术运算符
+的几种作用:
加法
正数
字符串连接符
除法的时候要注意一个问题:
整数相除,只能得到整数
要想得到小数,可以*1.0
赋值运算符
符号:
= , +=, -=, *=, /=, %=
=为基本的赋值运算符,其他的为扩展的赋值运算符
关系运算符
逻辑运算符
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
位运算符
三目运算符
格式
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数。
键盘录入数据练习
键盘录入数据概述
我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。
如何实现键盘录入数据呢?(目前先记住使用)
导包(位置放到class定义的上面)
import java.util.Scanner;
创建对象
Scanner sc = new Scanner(System.in);
接收数据
int x = sc.nextInt();
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
System.out.println(i);
}
}
流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
流程控制语句分类
顺序结构
选择结构
循环结构
顺序结构
顺序结构概述
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行
选择结构
选择结构
也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
if语句
if语句有三种格式
if语句第一种格式:
if(关系表达式) {
语句体
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
int i=1;
if(i>0){
System.out.println(“i是正数”);
}
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
int i=1;
if(i>=0){
System.out.println(“i是正数”);
}else{
System.out.println(“i是负数”);
}
if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
int i=1;
if(i>0){
System.out.println(“i是正数”);
}else if(i==0){
System.out.println(“i就是0”);
}else{
System.out.println(“i是负数”);
}
执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
switch语句
switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
格式解释
switch表示这是switch语句
表达式的取值:byte,short,int,char
(JDK5以后可以是枚举
JDK7以后可以是String)“字符串”
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
default可以省略吗?
可以省略。一般不建议。除非判断的值是固定的。(单选题)
break可以省略吗?
可以省略,一般不建议。否则结果可能不是你想要的
default的位置一定要在最后吗?
可以出现在switch语句任意位置。
switch语句的结束条件
遇到break
执行到程序的末尾
循环结构
循环语句的组成
初始化语句:
一条或者多条语句,这些语句完成一些初始化操作。
判断条件语句:
这是一个boolean 表达式,这个表达式能决定是否执行循环体。
循环体语句:
这个部分是循环体语句,也就是我们要多次做的事情。
控制条件语句:
这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
for循环语句
for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false
如果是false,循环结束。
如果是true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
注意事项
判断条件语句的结果是一个boolean类型
循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
while循环语句
while循环语句格式:
基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
for循环和while循环的区别
for循环语句和while循环语句可以等价转换,但还是有些小区别的
使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
场景区别:
for循环适合针对一个范围判断进行操作
while循环适合判断次数不明确操作
do…while循环语句
基本格式
do {
循环体语句;
}while((判断条件语句);
扩展格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
循环结构区别及注意事项
三种循环语句其实都可以完成一样的功能,也就是说可以等价转换,但还是有小区别的:
do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
注意事项:
写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。
如下代码是死循环
while(true){}
for(;?{}
跳转控制语句
前面我们已经说过了,Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环知道到某一步的时候就结束,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。
break 中断
continue 继续
return 返回
break的使用场景:
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的
break的作用:
跳出单层循环
跳出多层循环
带标签的跳出
格式:标签名: 循环语句
标签名要符合Java的命名规则
continue的使用场景:
在循环语句中
离开使用场景的存在是没有意义的
continue的作用:
单层循环对比break,然后总结两个的区别
break 退出当前循环
continue 退出本次循环
也可以带标签的使用(不演示了)
做一个练习
return关键字
不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。
演示案例:
结束循环其实是结束了main方法