基本运算
关键字
是指java中一些赋予了特殊含义的单词(例class)
java一共有53个关键字---const、goto(保留字)
标识符
在程序中自定义的名称
定义规则:字母、数字、下划线(_)和美元符号($,虽然可以使用,但是尽量减少使用,用于标识内部类),不能以数字开头,不允许使用关键字,见名知意
包名:域名倒写,全小写
类名/接口名字:大驼峰
变量名/方法名:小驼峰
常量:全大写,多个单词下划线隔开(_)
注释
单行注释//
多行注释/.../
文档注释/**...*/解释程序,辅助排错
常用的doc标记:
@author:指定java程序的作者
@version:指定源文件的版本
@deprecated:不推荐使用的方法
@param:方法的返回值说明信息
@throws:抛出的异常
常量
整数常量:所有的整数
小数常量:所有的小数
字符常量:将一个字母、数字或者符号用' '标识起来
字符串常量:将一个一个或多个字符用" "标识起来
布尔常量:表示逻辑值---true、false
空常量:null
进制
二进制:0-1,满二进一(1.7允许在程序中表示二进制数值0b,binary)
八进制:0-7,满七进一(0开头,octal)
十进制:0-9,满十进一
十六进制:0-f,满十六进一(0x开头,hex)
十进制转二进制:不断除以二取余,然后把余数倒排
二进制向十进制转换:低位次开始,每位乘以2的位次次幂,然后求和
二进制转八进制:低位次开,每三位化为一组产生一个八进制数字,最高位不足三位,补0,三变一的过程
二进制转十六进制:四变一
变量
声明变量:type varname[=初始值]
指定类型的变量只能接受类型与之匹配的值
变量必须先定义后使用
变量必须先赋值后使用
数据类型
基本数据类型:
- 字符类型:char(不允许定义空字符,转义字符)
'单引号 "双引号 \反斜杠 \t制表符 \n--newline换行符 \r-return回车符
jdk1.7开始\r和\n功能一致 - 数值类型:
整数类型:byte(-128~127
)、short(-2^15~2^15-1
)、int(-2^31~2^21-1
)、long(-2^63~2^63-1
)
浮点类型:float(-2^127~2^127,单精度浮点数,要求以f在结尾进行表识
)、double(-2^1023~2^1023java中小数默认double类型
)
0x3p5(p5表示2的5次方
)十六进制科学计数法 - 布尔类型:boolean(true、false)
引用数据类型:类、接口、数组扩展:位(bit)->字节(byte) 1b=8b 1kb=1024b mb gb tb
数据类型的转换
- 隐式转换\自动类型转换:
小类型可以自动转化为大类型
整数类型可以自动转化为浮点数类型(可能会出现精度损失)
在代码编译期间,jvm会检查数据的类型和声明的类型是否一致或者兼容,如果在赋值的时候是一个变量,不会去检查这个变量的值而是检查变量的类型和声明的数据类型是否兼容. - 显示转换\强制类型转换
大类型赋值给一个小类型或者是把一个小数值赋值给一个整数的时候就要进行强制类型转换
小数在强制转换为整数的时候会舍弃所有小数位.
运算符
算数运算符
"+" "-" "*" "/" "++" "--"
表达式类型的自动提升:
当一个算数表达式中包含多个基本类型额值时,整个算数表达式的数据类型将发生自动提升:
- 所有byte类型、short类型和char类型将被提升到int类型
- 整个算数表达式的数据类型自动提升到与表达式中最高等级操作数相同的类型
- 同一个类型参与运算,结果的类型与参与运算的类型一致
- 由于绝大部分小数在转换成二进制的时候是无限小数,所以doubule类型在存储小数的时候没有办法精确存储,因此也没办法来精确运算
- 整数/0->arithmeticexception 任意非零数值/0.0 infinity 0/0.0 nan
"%"---在做取余运算的时候,先按正数进行取余,然后看%左边数字的符号,如果左边的数值是正数,那么结果就是正数(可以对小数求余数3.2%2)
byte、short类型可以++、--
//java使用了中间缓存变量机制: i=i++;等同于: temp=i;//(等号右边的i) i=i+1; //(等号右边的i) i=temp; //(等号左边的i) //而i=++i;则等同于: i=i+1; temp=i; i=temp;
赋值运算符
= += -= *= /= %= &= |= ^= <<= >>= >>>=
注意:除了=以外,其他赋值运算符需要这个变量必须有值
byte、short可以参与赋值运算
关系\比较运算符
== != > < >= <=
== :如果比较的都是数值类型,即使数据类型不同,只要值相等也都返回true(例:97=='a'),如果两个数都是引用类型,只有当两个引用变量的类型具有父子关系才可以比较,且必须指向同一个对象才会返回true
!= :类似==
instanceof--判断对象是否是对应类的实例
"abc" isntanceof string->true
逻辑运算符
&&:短路与,两个操作数必须都是true才会返回true,前一个表达式为flase则后面的表达式不运算
&:不短路与,作用与&&相同,但不会短路
||:短路或,只要两个操作数中有一个为true就返回true,前一个表达式为true则后面的表达式不会运算
|:不短路或,作用与||相同,但不断路
!:非,如果操作数为true则返回false;如果操作数为false,返回true
^:异或,当两个操作数不同时返回true,相同时返回false&&的优先级比||高一点
位运算符
运算针对的的是整数,运算的是数据的补码
数据在计算机中是以补码存储的.最高位为符号位,正数最高位为0,负数最高位为1.
正数原码反码补码一样,负数的反码符号位不变其他位取反,补码等于原码取反加一.
"~":按位非,将操作数的每个位(包括符号位全部取反)
"^":按位异或,当两相同时为0,不同为1
"&":按位与:当两位同时为1时才返回1
"|":按位或:只要有一位为1,即可返回1
"<<":左移运算符(将操作数的二进制码整体左移指定位数,左移后空出来的位以0填充)
">>":右移运算符(将操作数的二进制码整体右移指定位数,右移后空出来的位以符号位填充)
">>>":无符号右移运算符(将操作数的二进制码整体右移指定位数,左移后空出来的位以0填充)
对低于int类型(如byte、short和char)的操作数总是先自动类型转换为int类型后再移位
对于int类型的整数移位a>>b,当b>32位时,系统先对32求余,得到的结果才是真正位移的位置(对long类型是64)
& | ^ << >> >>> ~a=a^b^b
;
交换两个数的值:
三变量法:
temp=i; i=j; j=temp;
加减法:
i=i+j; i=i-j; j=i-j;
异或
i=i^j; j=i^j;--->j=i^j^j--->j=i i=i^j;--->i=i^j^i--->i=j
java中的所有数值类型都是有符号的
三元运算符
(expression) ? if-true-statement : if-false-statement
从控制台获取数据
scanner sc=new scanner(system.in); double d=sc.nextdouble();//获取小数 int a=sc.nextint();//获取整数 string str=sc.nextline();//获取一行
'a'---97 'a'---65 '0'---48
运算符的结合性和优先级
单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算
上一篇: 手写Struts,带你深入源码中心解析