1.关键字
被赋予特殊JAVA含义的单词。关键字都是小写。
2.标识符
在程序中自定义的一些名称;26个英文字母大小写,0-9、_、$组成。比如说类名就是一种标识符
1.数字不能开头
2.不可以使用关键字
3.注释
用于注解说明程序的文字。多行注释中不能有多行注释。可以用多行注释缩小确定错误的范围
1.//单行注释
2./*
多行注释
*/
3./**
文档注释
*/
4.常量和变量
常量:
1整数常量2小数常量3.布尔型常量(0,1)4.字符常量(将一个数字字母或者符号用单引号标示'')5.字符串常量(将一个或多个数字字母或者符号用单引号标示"")6.null常量(只用一个数值null)
对于整数,有四中表现形式。
二进制:0、1,满2进1
八进制,0-7,满8进1,用0开头表示
十进制:0-9,满10进1
十六进制:0-9,A-F,满16进1,用0x开头表示
byte字节=8个二进制位 0000-00000000-00000000-00000000-0000
二进制位=bit位
1kb=1024byte
八进制其实就是3个二进制为一组
十六进制其实就是四个二进制为一组:1111-1111换算成十进制就是255
二进制的负数其实就是这个数的二进制数取反再加一,负数的二进制最高位是1
变量:
概念:
内存中的一个存储区域。
该区域有自己的变量名和类型
该区域的数据可以在同一类型范围内不断变化
为什么要定义变量:
用来不断存放同一类型的常量,并可以重复使用
使用变量注意:
变量的作用范围(用一对{}之间有效)
初始化值
tip:01100001---a
eg:
class Demo
{
public static void main(String[] args)
{
byte b = 6;
/*
在内存中开辟一个byte型变量b的空间,其大小为0000-0000,并给b赋值6,而在JAVA中整数都默认是int型,所以在内存中本应为0000-0000 0000-0000 0000-0000 0000-0110的6被强制转换为byte型的0000-0110
*/
byte x1 = 7;
byte x2 = 3;
b = x1 + x2;
/*
因为byte型的变量取值范围是-128~127,两个byte型相加有可能超出其取值范围,所以编译器会报错。
*/
System.out.ptingln(b);
}
}
编译会报错
5.运算符
+ - * / %取模 --自减
++自增:在原有数据上加1再赋给原有数据
eg:
int a=3,b;
b = a++;
/*
a++的特点在于,a自身的值需要先参与其他运算,然后再++,内存会开辟一个临时存储a本身值的空间,等号右边算完后,再把临时空间中a的值赋给b。
*/
b = ++a;
eg:
int i = 3;
i = i++;
问i=? i=3
+= -= /= *=
eg:
short s = 3; //short只有两个字节,int型的3强转赋值进short型的s。
s+=4;//一次赋值运算,有一个自动转过程。
s = s + 4;//两次运算,s是一个变量,不做自动转换。
编译会报错
比较运算符 > < != == >= <= instanceof,比较运算符de结果必须是true或者是false
逻辑运算符 用于连接两个boolean的表达式
&:与 &符号两边都得为真则输出true否则都是false。无论左边运算结果是什么,右边都参与运算。
|:或 |符号两边有一个为真则输出true,两个都是假则输出false。
^:异或和或有点不一样 ture^ture=falseture^false=turefalse^ture=turefalse^false=false
!:非 判断事物的反面 !!ture = ture
&&:双与 运算符左边遇到假就直接输出false,符号右边不参与运算
||:双或 运算符左边遇到真就直接输出true,符号右边不参与运算
位运算符:用于二进制位运算的符号
<< 左移 左移几位就是该数据乘以2的几次方,左移可以完成2次幂运算。
>> 右移 右移几位就是该数据除以2的几次方,对于高位出现的空位,原来是什么就用什么补充
>>>无符号右移 数据进行右移时,对于高位出现的空位,不论原来是什么,空位都用0补充
&与运算
|或运算 特点在于可以将有效位保留
^异或运算 特点是一个数异或同一个数两次,结果还是这个数
~反码
eg:
6&3=? 6&3=20000-00000000-0000 0000-0000 0000-0110
& 0000-0000 0000-0000 0000-0000 0000-0011
-----------------------------------------
0000-0000 0000-0000 0000-0000 0000-0010
3<<2=? === 3*2^2=12
|0000-0000 0000-0000 0000-0000 0000-0011|
00|00-0000 0000-0000 0000-00000000-11 | 左移2位
------------------------------------------
0000-0000 0000-0000 0000-0000 0000-001100
最有效率的算出2*8=?
System.out.println(2<<3);
对两个整数变量进行互换。(开发时使用阅读性强)
int a=3,b=5,c;
System.out.pringtln("a="+a+"b="+b);
c=a;
a=b;
b=c;
System.out.pringtln("a="+a+"b="+b);
对两个整数变量进行互换。(不用第三方变量)
方法1://这种方式不要用,如果两个整数数值过大,会超出int范围,会强制转换,丢失精度。
int a=3,b=5;
a=a+b;
b=a-b;
a=a-b;
System.out.pringtln("a="+a+"b="+b);
方法2:
int a=3,b=5;
a=a^b;//a=3^5
b=a^b;//b=a^b^b=a;b=3
a=a^b;//a=3^5^3=5;a=5
System.out.pringtln("a="+a+"b="+b);
三元运算符(if else的简写格式)
格式:
(条件表达式)?表达式1:表达式2
如果条件为true,运算结果显示表达式1;
如果条件为false,运算结果显示表达式2;
eg:int x = 3,y = 4,z;
z=(x<y)?y:x;
6.语句
程序流程控制
顺序结构
判断结构
if语句
1. if(条件表达式)
{
执行语句;
}
2.if(条件表达式)
{
执行语句;
}else
{
执行语句;
}
3.
if(条件表达式)
{
执行语句;
}else if(条件表达式)
{
执行语句;
}
......
else
{
执行语句;
}
局部代码块可以定义局部变量的生命周期。
选择结构
switch语句:相当于一个选择题
switch(表达式)//byte short int char
{
case 取值1:
执行语句;
break;//跳出
case 取值2:
执行语句;
break;
......
default:
执行语句;
break;
}
eg:
if和switch的应用:public class Season { public static void main(String[] args) { int mounth = 22; /* if (mounth == 3 || mounth == 4 || mounth == 5) { System.out.println("当前季节是春季"); } else if (mounth == 6 || mounth == 7 || mounth == 8) { System.out.println("当前季节是夏季"); } else if (mounth == 9 || mounth == 10 || mounth == 11) { System.out.println("当前季节是秋季"); } else if (mounth == 12 || mounth == 1 || mounth == 2) { System.out.println("当前季节是冬季"); } else { System.out.println("没有对应的季节"); } */ switch(mounth) { case 3: case 4: case 5: System.out.println("当前季节是春季"); break; case 6: case 7: case 8: System.out.println("当前季节是夏季"); break; case 9: case 10: case 11: System.out.println("当前季节是秋季"); break; case 1: case 2: case 12: System.out.println("当前季节是冬季"); break; default: System.out.println("没有对应的季节"); break; } } }
if:1.对具体的值进行判断 2.对区间判断 3.对运算结果是boolean类型的表达式进行判断
switch:1.对具体的值进行判断 2.值的个数通常是固定的
对于几个固定的值判断,建议使用switch语句,因为switch语句会一次性将所有程序加载到内存中,效率相对高
循环结构:
while循环结构:先判断再执行
do while循环结构:先执行再判断,无论条件满不满足,循环体至少执行一次public class Wh { /* while(条件表达式) { 执行语句; } */ public static void main(String[] args) { int x=1; while(x<=3) { System.out.println("x="+x); x++; } } }
public class Dw { public static void main(String[] args) { /* do { 执行语句; }while(); */ int x = 1; do { System.out.println("x="+x); x++; }while (x<=3); } }
for循环for和while的特点:/* for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句;(循环体) } */ public class ForDemo { public static void main(String[] args) { for(int x = 1; x<3 ; x++) { System.out.println("x="+x); } } }
1.for和while可以互换。2.格式上的不同,在使用上有点区别,如果需要通过变量来对循环进行控制,该变量只作为循环增量存在时,区别在于变量的作用域。
无限循环最简单的形式:while(true){} for(;;){}
什么时候使用循环结构呢?
当对某些代码执行很多次时,使用循环结构完成。
当对一个条件进行一次判断时,可以使用if语句。
当对多个条件进行多次判断时,可以使用while语句。
break(跳出)用于switch语句和循环语句,当break语句单独存在时,下面不要定义其他语句,因为执行不到
可以给循环取名字,用break指定特定的循环跳出
continue(继续)用于循环结构,结束本次循环继续下次循环
7.函数(方法)
函数的定义:定义在类中具有特定功能的一段独立小程序。也称为方法。
特殊情况:方法没有具体的返回值,这时return后面直接用分号结束。返回值该怎么体现?因为没有具体值,所以不可以写具体的数据类型。在java中只能用一个关键字来表示这种情况。关键字是:void。
总结:没有具体返回值的时候,返回值类型用void来表示,如果返回值类型是void则方法体中可以不写return。
注意:不可以在方法内部定义方法。定义方法时,该方法的结果应该返回给调用者,交给调用者处理
方法两个需明确的地方。1.这个功能的结果是什么?2.这个功能实现过程中是否需要未知内容参与运算?
8.数组
同一类型数据的集合
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
内存的划分:
1.寄存器
2.本地方法区
3.方法区
4.栈内存:存储局部变量。而且变量所属的作用域一旦结束,该变量就自动结束
5.堆内存:存储是数组和对象(其实数组就是对象),凡是new都建立在堆中。
1.每一个实体都有首地址值
2.每一个变量都有默认初始化值,根据类型的不同而不同。整数是0。小数是0.0或者0.0f。boolean是false。char是'\u0000'
3.垃圾回收机制
各种高级语言都有这些东西,只不过表现形式不同。所要掌握的是1.高级语言的表现形式(固定的)2.何时使用此语法(编程思想)