标示符
1、java语言的组成:
关键字、标示符、注释、常量和变量、运算符、语句、函数、数组
2、关键字:
关键字的定义和特点 | |||||
定义:被java语言赋予特殊含义的单词 特点:关键字中所有字母都为小写 | |||||
用于定义数据类型的关键字 | |||||
class | interface | byte | short | int | long |
float | double | char | boolean | void |
|
用于定义数据类型值的关键字 | |||||
true | false | null |
|
|
|
用于定义流程控制的关键字 | |||||
if | else | switch | case | default | while |
do | for | break | continue | return |
|
用于定义访问权限修饰符的关键字 | |||||
private | protected | public |
|
|
|
用于定义类与类之间关系的关键字 | |||||
extends | implements |
|
|
|
|
用于定义建立实例及引用实例,判断实例的关键字 | |||||
new | this | super | instanceof |
|
|
用于异常处理的关键字 | |||||
try | catch | finally | throw | throws |
|
用于包的关键字 | |||||
package | import |
|
|
|
|
其他修饰的关键字 | |||||
native | strictfp | transient | volatile | assert |
|
3、标示符
a) 定义:在程序中自定义的一些名称
b) 组成:由26个英文字母、数字、_$组成
c) 标示符规则:数字不能开头、不可以使用关键字
d) Java中严格的区分大小写
e) 注意:起名字的时候,遵循见名知意
f) Java中的名称规范
l 包名:多个单词组成的时候,所有的单词小写
xxxxxx
l 类名接口名:多个单词组成的时候,首字母大写
XxxYyyZzz
l 变量名函数名: 多个单词组成的时候,第一个单词的首字母小写,第二个单词开始的每个单词首字母大写
xxxYyyZzz
l 常量名:所有的字母都是大写。多个单词时,每个单词用下划线连接。
XXX_YYY_ZZZ
4、注释:
Ø 定义:用于注解说明解释程序的文字就是注释
Ø 好处:提高代码的阅读性
Ø Java中注释的格式:
单行注释: //注释文字
多行注释:/*注释文字*/
文档注释:/**注释文字*/
Ø 对于单行注释和多行注释,被注释的文字,不会被JVM解释执行
Ø 对于文档注释,是java特有的注释,其中注释的内容可以被JDK提供的javadoc所解析,生成一套以网页文件形式的该程序的说明文档。
Ø 注释是灭一个程序员必须要养成的良好的编程习惯。
Ø 例子:
/**
这是我的Helloworld 程序
@author 丽丽
*/
class Demo
{
/*
这是主函数,程序的入口
它可以使得程序独立运行
*/
public static voidmain(String[] args)
{
//这是输出语句,用于将括号内的内容打印到控制台
System.out.println("hello world!");
}
常量和变量
1、常量表示不能改变的数值
2、Java中常量的分类:
Ø 整数常量。所有的整数
Ø 小数常量。所有的小数
Ø 布尔型常量。只有两个值,true和 false
Ø 字符常量。 将一个字符或者字母用单引号标识
Ø 字符串常量。将一个或者多个字符用双引号标识
Ø nul常量。只有一个数值:null
3、对于整数:java中有四种表现形式。
Ø 十进制:0-9,满十进1
Ø 八进制:0-7,满8进1,用0开头
Ø 十六进制:0-9 ,A-F ,满是16进1,用0x标识。
Ø 二进制:0和1的组合,满2进1。
进制的特点
1、进制的由来:在计算机中所有的数据都是以二进制的形式存在的。但是由于二进制中只有0和1,所以表示起来很麻烦,所以出现了其他的进制,三个一组为8进制,4个一组为16进制。
2、特点:进制越大,表现的形式越简单。
进制的转换(十进制和二进制)
1、十进制转换为二进制:除2取余,倒着写
2、二进制转换为十进制:乘以2的n次方幂,再求和。
进制的转换(十六进制和八进制)
1、对于其他进制的转换,我们一般先转换为二进制。
进制的转换(负数的二进制)
1、负数的而二进制最高位为1。
2、负数的二进制表现形式是其对应的整数的二进制取反加1.
注意:在计算机中整数占4个字节,即32位
例子:求-6 的二进制的表现形式。
6的二进制的表现形式: 0000-0000 0000-0000 0000-0000 0000-0110 取反之后: 1111-1111 1111-1111 1111-1111 1111-1001 加1之后: 1111-1111 1111-1111 1111-1111 1111-1010 所以-6的二进制表现形式为 1111-1111 1111-1111 1111-1111 1111-1010
|
变量
1、变量的概念:
Ø 内存中的一块存储区域
Ø 该区域有自己的数据类型和变量名
Ø 该区域的数据可以在同一个数据类型范围内不断的变换。
2、为什么定义变量
Ø 用来不断的存放同一个数据类型的常量,使得该区域可以重复的使用
3、使用时需要注意的
Ø 变量的作用范围为{}
Ø 在定义变量的时候要赋予初始化值
4、 定义变量的格式
Ø 数据类型 变量名 = 初始化值;
5、java语言是强类型的语言,对于每一个数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。
基本数据类型 |
引用数据类型 |
数值型 |
字符型 char (2) |
布尔型 boolean |
整数(byte(1)、short(2)、int(4)、long(8)) |
浮点( float (4) 、double(8)) |
类 class |
接口 interface |
数组 [] |
注意:整数型默认为int ,浮点型默认为double
例子:
classDate
{
public static voidmain(String[] args)
{
byte b =2 ;//-128~127
short c=30000;//一般是30000以内
int a = 30;
long d = 90l; //一般加上l,从而说明是long类型
float e = 3.5f; //默认为double,必须加f
double t= 3.54;
char m = ' ' ;
boolean g =true;
}
}
类型转换
1、自动类型转换(也叫做隐式类型转换)
2、强制类型转换(也叫做显示类型转换)
3、表达式的数据类型自动提升:
原则上向着大的转换
l 所有的byte、short、char的值被提升为int型。
l 如果一个操作数是long型,计算的结果是long型。
l 如果一个操作数是float型,计算的结果是float型
l 如果一个操作数是double型,计算的结果是double型
4、char类型的也是可以参加运算的。
算术运算符
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
- | 负号 | b=4;b=-b; | -4 |
+ | 加号 | 5+5 | 10 |
- | 减号 | 6-4 | 2 |
* | 乘号 | 3*4 | 12 |
/ | 除号 | 5/5 | 1 |
% | 取余 | 5%5 | 0 |
++ | 自增(前) | a=2;b=++a; | a=3;b=3 |
++ | 自增(后) | a=2;b=a++; | a=3;b=2; |
-- | 自减(前) | a=2;b=--a; | a=1;b=1; |
-- | 自减(后) | a=2;b=a--; | a=1;b=2; |
+ | 字符串连接符 | ‘’hell’’+’’o” | “hello” |
注意:
l 在%(取余)运算中,如果出现负数,只看被除数。(面试)
l 自加和自减
class OperateDemo
{
public static voidmain(String[] args)
{
int a=3,b;
b=a++;
c=++a;
System.out.println(a+","+b);
System.out.println(a+","+c);
//a=4 ;b=3;c=4
//这是因为a++ 相当于 a=a+1
//在自加和自减中,++(--)在前,会先做++,在后则后做++;
}
}
l 字符串连接符+
class OperateDemo2
{
public static voidmain(String[] args)
{
System.out.println("5+5="+5+5);
//结果是5+5=55
//当+表示字符串连接符的时候,最终的结果都会变成字符串
//"5+5=5""5+5=55"
}
}
转义字符
class OperateDemo3
{
publicstatic void main(String[] args)
{
/*
转义字符:通过\ 来转变后面的字母或者符号的含义。
\n:换行
\b: 退格,相当于backspace
\r: 按下回车键。在windows系统中,回车符是由两个字符表示的,\r\n
\t: 制表符。相当于tab键
*/
//想打印带双引号的hello
System.out.println("\"hello\"");
//注意
charch= '\n';
//转义字符转过来的还是字符
charc = '你' ;
//一个汉字占2个字节,一个字符占2个字节,所以0k(面试)
}
}
赋值和比较运算字符
一、赋值
1、符号(都是一个运算符):
=、+=、-=、*=、/=、%=
注意:对于 +=、-=、*=、/=、%= 等是先做运算,然后把结果给左边
例如:int a=2;a+=2;
结果输出a=4;
2、 面试
short s =3;
s=s+2;
s+=2;
对于上述,s=s+2,编译失败,原因是s是short型,2是整型,在做运算的时候,s会被自动提升为int型,两个int型想加的结果为int型,无法赋值给short型的s;而对于s+=2;编译通过,这是因为+=运算符在给赋值的时候自动完成了强转操作。
二、比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | flase |
>= | 大于等于 | 4>=3 | true |
instanceof | 检验是否是类的对象 | “hello” instanceof String | true |
注1:比较运算符的结果都是boolean,即结果要么是true,要么是flase;
住2:比较运算符“==”不能误写为“=”
逻辑运算符
运算符 | 运算 | 范例 | 结果 |
& | AND(与) | false&true | false |
| | OR(或) | false|ture | true |
^ | NOR(异或) | true^true | false |
! | Not(非) | !true | flase |
&& | AND(短路) | false&&ture | false |
|| | OR(短路) | false||true | ture |
说明:
1、 &:当两边有一个为false,结果为false;只有当结果都为ture的时候,结果为true;
2、 |:当两边有一个为true,结果为true;只有当结果都为false的时候,结果为false;
3、 ^: 同假异真
4、 !:!ture= false; !false=true;
5、 && || 与 & | 的区别是双的会短路
即对于&& :当左边为false的时候,不判断右边
对于||:当左边卫ture时,不判断右边。
位运算(左移右移)(挺好)
运算符 | 运算 | 范例 |
<< | 有符号左移 | 3<<2=12相当于3*4=12 |
>> | 有符号的右移 | 6>>2=1相当于6/4=1 |
>>> | 无符号右移 | 3>>>1=1相当于3/2=1 |
& | 与运算 | 3&6=2 |
| | 或运算 | 6|3=7 |
^ | 异或运算 | 6^3=5 |
~ | 反码 | ~6= -7 |
1、对于左移和右移运算,相当于做乘除法,只是乘除的是2的倍数。
对于>> :相当于除以2的移动次数次幂
对于<<: 相当于乘以2的移动次数次幂
2、有符号右移<< 和无符号右移>>> 的区别?
>> : 移动之后,左边补0还是1,看得是最高位
>>> :移动之后,左边永远补0
3、注1:移位的原理是二进制的移位。
注 2:作为职业程序员,我们一般会选择用这个。
4、位运算就是诸位的二进制进行运算。
5、反码:我们知道,负数是其对应的整数取反加1得来的,所以反码,就是这个数减1,取反,再加上符号得来的。
6、一个数异或上同一个数两次结果还是那个数。
例如:3^5^5=3
位运算练习
1、对两个整数变量的值进行互换(不需要第三方变量)(实际开发中不怎么用)
class Test
{
public static voidmain(String[] args)
{
int m=3,n=4;
System.out.println("m="+m+","+"n="+n);
n=n^m;
m=n^m;//(n^m)^m=m
n=n^m;//(n^m)^n
System.out.println("m="+m+","+"n="+n);
}
}
练习2&三元运算符
1、格式
(条件表达式)?表达式1:表达式2;
如果结果为true,执行表达式1,否则执行表达式2
2、示例:
获取两个数中的最大者
class Demo
{
public static voidmain(String[] args)
{
int x = 3,y=5;
System.out.println((x>y)?x:y);
}
}
3、因为是三元运算符,所以必须有返回结果。
if 语句
1、if语句的三种格式:
l 单层:
If(条件表达式){执行语句;}
l 双层:
if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
l 多层嵌套
If(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
Else if (条件表达式)
{
执行语句;
}
…………
else
{
执行语句;
}
说明:
先判断if中的条件表达式,满足执行,不满足,判断条件else if中的条件表达式,。。。。如果以上都不满足,则执行else语句。
例子:
class Demo2
{
public static voidmain(String[] args)
{
int m= 3;
if(m>1)
System.out.println("a") ;
else if(m>2)
System.out.println("b") ;
else if(m>1)
System.out.println("c") ;
else
System.out.println("d") ;
}
}
//输出结果为a
注意:无论是单层、双层还是多层都是同一体。
If练习
/**
需求1:根据用户定义的数值不同,打印对应的星期英文
思路:使用if else嵌套语句实现。
需求2:根据用户指定的月份,打印该月份所属的季节。
假设3,4,5是春节,6,7,8是夏季,9,10,11是秋季,12,1,2是冬季
思路1:值相等的方法
思路2:区间判断的方法
*/
class IfTest
{
publicstatic void main(String[] args)
{
intday = 4;
if(day==1)
System.out.println(day+"星期一");
elseif(day==2)
System.out.println(day+"星期二");
elseif(day==3)
System.out.println(day+"星期三");
elseif(day==4)
System.out.println(day+"星期四");
elseif(day==5)
System.out.println(day+"星期五");
elseif(day==6)
System.out.println(day+"星期六");
elseif(day==7)
System.out.println(day+"星期日");
else
System.out.println(day+"不存在");
intmonth=1;
//思路1
if(month==3||month==4||month==5)
System.out.println(month+"春季");
elseif(month==6||month==7||month==8)
System.out.println(month+"夏季");
elseif(month==9||month==10||month==11)
System.out.println(month+"秋季");
elseif(month==12||month==1||month==2)
System.out.println(month+"冬季");
else
System.out.println(month+"不存在");
//思路2
if(month>12&&month<1)
System.out.println(month+"不存在");
elseif(month>=3 && month<=5)
System.out.println(month+"春季");
elseif(month>=6 && month<=8)
System.out.println(month+"夏季");
elseif(month>=9 && month<=11)
System.out.println(month+"秋季");
else
System.out.println(month+"冬季");
}
}
Switch语句
1、格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;;
break;
……
default:
执行语句;
break;
}
2、switch语句的特点:
a) switch语句选择的类型只有四种:byte、short、int、char、字符串、枚举类型。
b) 无序性,就是case与default之间没有顺序,但是先执行第一个case,没有匹配的才执行default
c) 结束switch语句的两种情况:遇到break或者执行到switch语句结束。
d) 如果case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
3、代码:
class SwitchDemo
{
public static voidmain(String[] args)
{
int a =3;
switch(a)
{
case 4:
System.out.println("a");
break;
case 5:
System.out.println("b");
break;
case 3:
System.out.println("d");
break;
default:
System.out.println("不对");
}
//结果为d
System.out.println("===============================");
//无序性+缺少break
int b= 5;
switch(b)
{
default:
System.out.println("a");
case 3:
System.out.println("b");
case4:
System.out.println("d");
break;
case1:
System.out.println("m");
}
//输出结果为 a b d
System.out.println("===============================");
//switch选择语句的类型为char
int c=3,d=5;
char ch='+' ;
switch(ch)
{
case '+':
System.out.println("加"+(a+b));
break;
case '-':
System.out.println("减"+(a-b));
break;
case '*':
System.out.println("乘"+(a*b));
break;
case '/':
System.out.println("整除"+(a/b));
break;
default:
System.out.println("不是合法的运算");
}
}
}
Switch语句的练习
1、
/**
需求:根据用户指定的月份,打印该月份所属的季节。
假设3,4,5是春节,6,7,8是夏季,9,10,11是秋季,12,1,2是冬季
*/
class SwitchTest
{
public static void main(String[] args)
{
int month=6;
switch(month)
{
case 3:
case 4:
case 5:
System.out.println(month+"春季");
break;
case 6:
case 7:
case 8:
System.out.println(month+"夏季");
break;
case 9:
case 10:
case 11:
System.out.println(month+"秋季");
break;
case 12:
case 1:
case 2:
System.out.println(month+"冬季");
break;
default:
System.out.println(month+"不存在") ;
}
}
}
If和switch语句很像,具体什么场景下用哪个语句呢?
如果判断的具体的数值不多,而且符合byte、short、int、char四种类型,用switch,这样效率会高。
其他情况,对区间判断、对结果判断为boolean类型,使用if。