关键字,标识符,变量,基本数据类型,基本数据类型转换,运算符,程序流程控制,数组
---------------------------------------------------------------------------------
- 关键字
定义?什么要求?
用做专门用途的字符串,不能被用来命名
特点
* 所有字母都为小写
class interface int true null if abstract new pakage 等...
保留关键字,以后可能用作关键字使用,避免自己命名使用
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
* String类型不是关键字,是一个引用类
- 标识符
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
自己可以起名字的地方都叫标识符
标识符规则:
_或 $ (只有两个符号) 由26个英文字母大小写,0-9 组成。
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
* 可以是关键字大写来作为标识符,不建议这样写
- 命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
---------------------------------------------------------------------------------
- 变量
变量的作用域:一对{ }之间有效
该区域有自己的名称(变量名)和类型(数据类型)
Java中每个变量必须先声明,后使用
基本数据类型:
数值型:
整型 byte short int long
1 2 4 8 字节 1字节=8bit -128~127
浮点型 float double
4 8 字节
5.12 512.0f .512 (必须有小数点)
科学计数法形式也可以 5.12e2 512E2 100E-2
int为默认整型 double为默认浮点型
声明long须在数据后加L或l float在后加f或F
字符型:char
只能表示一个字符'a','9','中','\t' 一个转义字符,中文字符都可以
"中国" "ab"表示 字符串 "//" 表示 \
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char类型是可以进行运算的。因为它都对应有Unicode码。
ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。
这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
ASCII码不能表示所有字符。
Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。
Unicode 的缺点:Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储
UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度
布尔型:boolean
boolean类型数据只允许取值true和false,无null。
不可以0或非 0 的整数替代false和true,这点和C语言不同。
变量之间的运算(不考虑boolean)
自动类型转换 (运算或赋值时)
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
char->int
byte->int
short->int->long->float->double
byte a1=1; byte a1=1;
short a2=128; byte a2=2;
short a3; byte a4;
a3=a1+a2; a4=a1+a2;
如果a3声明为short,a4声明为byte会报错,自动换成了int运
* 注意:
* 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
* byte,short,char互相之间不会相互转换,他们三者(即使两者类型相同)在计算时首先转换为int类型。
* 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型
强制类型转换
强制运算符(int)short
但可能造成精度降低或溢出,格外要注意。
* 溢出后是按保存在计算机的二进制损失高位
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
只要基本数据类型与String做运算都回转成字符串显示,
boolean类型不可以转换为其它的数据类型
进制
对于整数,有四种表示方式:
二进制:0,1 ,满2进1.以0b或0B开头。
十进制:0-9 ,满10进1.
八进制:0-7 ,满8进1. 以数字0开头表示。
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
如:0x21AF +1= 0X21B0
原码、反码、补码
所有数字在计算机底层都以二进制形式存在。
计算机以补码的形式保存所有的整数。
正数的原码、反码、补码都相同
负数:
原码:直接将一个数值换成二进制数。最高位是符号位1表示负数
反码:是对原码按位取反,只是最高位(符号位)确定为1。
补码:负数的补码是其反码加1。
Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位
确定负数(例如指定11110001是byte类型,可以确定是负数)
怎么由补码得到原码---补码-1得到反码,取反得到原码
-100的补码减-1可以得到-101的补码
引用数据类型:
类 class 包含String字符串类型
接口 interface
数组 []
---------------------------------------------------------------------------------
运算符
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
位运算符
三元运算符
算术运算符
+-* / % ++ -- 字符串相加+
除:如果是有double类型运算,都转为double,可以得到正确的计算结果
(double)12/5 2.4
(double)(12/5) 2.0
取余,取模:结果的符号取决于被模数,前边的那个
前++ -- 后++ -- 前:是先自增1再做运算 后:是先做运算,再自增1
int i =10
int j=i++ i=11 j=10
int j=++i
赋值运算符
= += -+ *=... 不会改变变量的数据类型
short s=3;
s+=1与s=s+1有什么区别?
前面不用进行类型转换得到的s仍然是short,后面会报错运算后是int类型需要进行强转
int s=3;
s*=0.1; 输出结果为0 *运算为0.3 ,为int型为0
=赋值符号,支持连续赋值 区分好==和=的区别特别是if()判断语句里
比较运算符(关系运算符)
== != < <= instanceof检查是否是类的对象
比较后的结果都是boolean类型
逻辑运算符
逻辑与& 或| ! 逻辑异或^
短路&& ||
&同真为真
短路是当左边条件不满足时,右端不会运行 即使右端运算符优先级高于&&或||
位运算符
是直接对二进制进行运算
<<左移 >>右移 >>>无符号右移 &与运算 |或运算 ^异或运算 ~取反
左移二进制码向左移,左边多的截取掉,低位补0。 (正数如果没超过位数,没有符号位即高位默认是0不变成1)相当于移几位,在十进制基础上*几个2
右移 右边截取掉,高位符号位是什么就补什么
无符号右移 高位都补0
与或运算,两个二进制码有由0,1组成 想象成0是false,1是true,来进行对位的取值得到二进制码
异或,只有两个是不一样码的时候取1
互换两个变量的值
方法1:定义一个中间变量temp
2:两个作和 m,n较大时,可能出现精度损失
3:取异或 例m=m^n; n=m^n; m=m^n 因为(m^n)^n=m (m^n)^m=n
三元运算符
(条件表达式)?表达式1:表达式2 条件成立true结果为1反之
表达式可以都是字符串类型
两个表达式为同种类型,必须会返回一个结果,可以嵌套
String str=(i>j)? "i大":(i==j)?"相等":"j大"
先计算条件,然后只运行满足条件的表达式
运算顺序由运算符优先级和结合性
结合性:确定一个运算符的操作数(表达式)是什么 赋值,三元,单目是右边向左边运算,指右边向左边结合
例如:(i>j)? "i大":(i==j)?"相等":"j大"
由结合性 上面不能是(i>j)? "i大":(i==j)先左 ?"相等":"j大" 后右 结合
而是(i>j)? "i大":[(i==j)?"相等":"j大"] 按右向左这样的顺序(结合性)来选择操作数
再比如 b=c+d 是c+d赋值给b 而不是b赋值给c再+double
结合性帮助我们选择操作数来添加( )运算顺序,操作数再根据优先级计算
优先级是指相邻的两个运算符的运算顺序
优先的高的按照结合性选择操作数,组成一个表达式然后先计算
程序流程控制
顺序结构
分支结构
if…else switch
if…else
程序判断由上向下执行,有包含关系范围小的写在范围大的前边
if语句的{}省略,只能是一行代码 一个;结尾
switch(){ * 括号里边的值是变量或者值 处理数据score/60 case判断更简洁 数据类型可以是char byte short int 枚举 String(jdk1.7后可以用)
case 常量1: *case这里是常量,不能是取值范围; 多个case处理块语句一致的话,前边可以不写 什么时候不一样可以再写语句或一样再省略
语句1: 语句可以有多条执行
break; *有的话跳出switch语句,没有break如果已经进入一个case还会继续往下执行,不管case符不符合值,直到有break或执行完语句
case 常量2:
语句2:
break;
default: *default位置不固定,可以在任意位置,可以没有,始终是先匹配case,case没有再走default
语句;
break;
...
}
循环结构
while, do while, for, foreach
循环语句的四个组成部分
初始化部分
循环条件部分
循环体部分
迭代部分
while: do while:
初始化语句; 初始化语句块;
while(循环条件){ do{
循环体; 循环体
迭代部分; }迭代部分
} while(循环条件);
* do while至少执行一次循环体,再判断是否满足循环条件
for(int i=0;i<3;i++){
System.out.println("请输入第"+(i+1)+"个数字:"); 1,2,3
}
* 注意变量的范围,在for循环里定义的,for循环执行完会被释放掉
* 怎么在for循环里定义变量名自增1如num1 num2 num3
只能是定义一个数组,循环得到的值存入数组中
或者
Map<String,Integer> numMap=new HashMap<String,Integer>();
for(int i=0;i<50;i++){
System.out.println("::::num_"+i);
numMap.put("num_"+i,new Integer(i));
System.out.println(numMap.get("num_"+i));
}
将循环的变量名和值存入Map集合,再取出来
举例: 一般情况不这样做,一般利用数组,节约内存
Scanner sc=new Scanner(System.in);
Map<String,Integer> numMap=new HashMap<String,Integer>();
for(int i=0;i<3;i++){
System.out.println("输入");
numMap.put("num_"+(i+1),new Integer(sc.next()));
}
for(int i=0;i<3;i++){
System.out.println(numMap.get("num_"+(i+1)));
}
冒泡排序,数组排序!!!多练,想
取个十百位上的数,利用/ 或求余
* 最简单无限循环格式while(true){}, for(;;) ;用在想要一直循环程序,或特定条件跳出循环,
使用if判断后 break;就会跳出当前循环。 注意是跳出循环
*break:
跳出当前循环,或再Switch-case中跳出switch
*** 嵌套循环时,如果在内层就是跳出内层循环,进行外层循环的下一次判断,在外层就不执行外层循环了跳出整个循环语句
continue:
*** 使用在循环中,表示结束当次循环,结束当前判断的循环条件这一次循环,直接进行下一次判断,continue后边的语句不会被执行。
label:label标签 , label写在想要标记for循环的前面 label:for( ; ;...){}
然后在想要break或continue的地方写 break/continue lable; 就会跳出label指定的当前/当次for循环。
return:
一个是结束方法的执行 :一旦调用return,方法直接结束执行
一个是返回方法的指定类型的指
嵌套循环
* long end=System.currentTimeMills()输出系统当前时间毫秒为单位,规定了一个时间开始1970年
System.out.println(end-start) 就可以得出程序运行的时间
------------------------------------------------------------------------------------
习题练习:
闰年:能被4整除不能被100整除或被400整除 2月29 天
质数又称素数:指一个大于1的自然数,除1和本身外不能被其他自然数整除,否则称合数
有个检测的界限为根号i,因为一个数i=m*n m越大,n越小,当m=n时为中间值,所以判断根号i之前的数能不能被整除就可以
@Test
public void test3(){
// boolean flag=true;
long start=System.currentTimeMillis();
System.out.println(start);
l: for(int i=2;i<=1000;i++){
for(int j=2;j<Math.sqrt(i);j++){
if(i%j==0){
// flag=false;
// break;
continue l;
}
}
// if(flag==true)
System.out.println(i);
// flag=true;
}
}