变量
数据类型:Java是一种强类型编程语言
生命周期:有效范围,Java提供了垃圾回收机制
int kk = 100;
Java中的数据类型可以分为两大类
基本类型【原生】和引用类型【复杂】
基本类型
4型8种:
整型:byte、short、int、long
①Java采用补码的方式存储数据②四种不同的表示方式:十进制、0 八进制、0x十六进制、0b 二进制③在使用字面量,Java中的整数默认类型是int,如果想表示long则在数值末尾加l/L,一般建议使用L
浮点数 float单精度、double双精度
字符类型 char
char = ‘中’ 注意:使用单引号
1、Java中字符采用的是Unicode编码字符集,2B,对应的整数为0-655352、字符类型的变量可以当做整数使用3、'0'<'A'<'a'4、Java中提供了转意字符,以反斜杠开头
(1)\ddd 1-3位的8进制数对应的字符
(2)\uxxxx 1-4位的16进制数对应的字符
布尔类型
整型数的进制转换
int kk = 123;//将十进制数转化为8进制System.out.println(Integer.toHexString(kk));//将十进制数转化为2进制数System.out.println(Integer.toBinaryString(kk));
常见的数学计算
Java提供了一个Math类,其中包含了基本运算的属性和方法
Math.sqrt()开平方Math.pow(a,b)计算a的b次方Math.abs()求绝对值Math.max/min获取最大值最小值Math.cell获取距离目标值最近的最小的整型数值,floor获取距离目标值最近的最大的整型数值Math.round 四舍五入计算Math.random 获取一个大于或等于0
double dd = 144.d;System.out.println(Math.sqrt(dd));// 开平方int k1 = 12;System.out.println(Math.pow(k1, 2));// 计算k1的2次方System.out.println(Math.pow(dd, 0.5));k1 = -123;System.out.println(Math.abs(k1)); // 绝对值System.out.println(Math.max(dd, k1));// 获取2个数值之间较大的数System.out.println(Math.min(dd, k1));// 獲取2个数值之间较小的数// 浮点数转整型数dd = 3.45;System.out.println(Math.ceil(dd)); // 天花板System.out.println(Math.floor(dd)); // 地板dd = -3.45;System.out.println(Math.ceil(dd));System.out.println(Math.floor(dd));// 四舍五入,注意考核中的坑在于复数的处理dd = -3.45;System.out.println(Math.round(dd)); // -3dd = -3.56;System.out.println(Math.round(dd));// -4// 随机数System.out.println(Math.random); // 0.7683377459693336
除了简单计算之外,还有指数、对数、三角和反三角函数等方法
char c = 'a';System.out.println(c);c++;//给C+1,计算结果等价于c=c+1,但是这里涉及数据类型转换问题,所以c=c+1会有语法错误。System.out.println(c);//將字符转换为整数System.out.println((int)c);c = '中';System.out.println(c+"==="+(int)c);//转义字符System.out.println('\123');int kk = 0123;System.out.println((char)kk);System.out.println('\u9110');kk = 0x9110;System.out.println((char)kk);char cc = '\\';System.out.println(cc);System.out.println((int)cc);
基本类型数据转换
小转大自动转,大转小需要强制转 窄化操作
//小转大byte b1 = 123;//自动识别123位byte类型,但是如果超出范围则自动报错long k1 = b1;double k2 = k1;//大转小double d1 = 123.456;long k1 = d1; //语法错误 Type mismatch: cannot convert fromlong k2 = (long)d1
强制类型转换的语法**(目标类型)变量**
注意:Boolean类型和数值类型之间没有任何对应关系,所以进行强制类型转换会报语法错误
boolean bb = true;System.out.println((int)bb);int kk = 123;System.out.println((boolean)kk);
针对浮点数的特殊处理
针对浮点数系统默认的是double类型,所以123.456系统识别为double类型,但是变量声明为float,所以这里需要进行数据转换或者进行特殊声明
double d1 = 123.456;//long k1 = d1;long k1 = (long)d1;//强制类型转换System.out.println(k1);//使用强制类型转换可能会导致精度丢失问题//针对浮点数的特殊处理//float f1 = 123.456;float f1 = 123.456f;float f2 = (float)123.456;
复合数据类型
复合数据类型包括:类class、接口类型interface、数组
特殊值null,在运行时并没有对应的类型,但是它可以被转换成任何复杂类型,但是不能赋值给
简单类型
复合类型的默认值就是null空指针
常量
常量就是指在程序执行的期间其值
final double PI = 3.1415;PI = PI + 1;//语法报错原因是final表示PI是常量,不允许修改System.out.println(PI);
表达式
表达式就是运算符、操作符以及方法的调用序列,用来说明某个计算过程并返回计算结果。
基本运算符可以分为:
算术运算符:+ – * / % ++ –
关系运算符:> >= < <= == !=
逻辑运算符:&&与运算,表示并且的关系 ||或运算 表示或者的关系 ,!非运算,表示不是。重点在于计算过程中支持短路操做
位运算符:&与 |或 ^异或 ~按位取反 <>右移位,基本不做要求,位运算符不支持短路操作
赋值运算符:= += -= *= /= %=
三目运算符:(表达式1? 表达式2: 表达式3) 表达式1为真 返回表达式2的值,为假 返回表达式3的值
算术运算符
+-*/特殊:整除计算,参与计算的双方都是整数,则计算为整数计算,结果中不会有小数部分,即10/3=3不是3.3333.如果10./3返回值就是3.333...因为10.为浮点数,不是整除%取余[取模]10%3 = 1 实际上就是10除以3的余数double k = 10.12;System.out.println(k%3);++和--是单目运算符i++计算结果等价于i = i + 1,i--结果等价于i = i - 1;有两种写法:i++是先获取i的值,然后针对i执行+1操做、int age = 99;System.out.println(age++);//输出值为99System.out.println(age);//没有运算符,输出值为100++i针对i执行+1操做,然后获取i的值int age = 99;System.out.println(++age);//输出值为100System.out.println(age);//输出值为100
问题:将一个任意正整数进行反转,如果数值越界则返回-1.
最大整数Integer.MAX_VALUE,最小整数Integer.MIN_VALUE
public class Test {public static void main(String[] args) {int k=2000009999;long res=0;while(k>0) {int p=k%10;k=k/10;res=res*10+p;if(res>Integer.MAX_VALUE) {res=-1;break;//立即终止循环执行}}System.out.println(res);}}
如果这段代码需要多个地方使用,则需要定义一个方法,其中包含处理逻辑,其他地方使用时直接通过名称就可以进行调用
public class A1{public static void main(String[]args){int k=2000009999;System.out.println(reverse(k));}public static int reverse(int k){//定义的方法,不会主动执行,需要在main方法中进行调用。这里可以先理解public static是固定写法【实际上有问题】,int表示返回值类型,reverse是方法名称,以后需要使用这段代码时通过名称就可以直接调用,int x是参数,表示调用方法时必须传入一个int类型的参数。long res = 0;while(k>0) {int p=k%10;k=k/10;res=res*10+p;if(res>Integer.MAX_VALUE) {res=-1;break;//立即终止循环执行}}return (int)res;}
关系与算符
用于判断两个数据之间的大小关系,计算结果就是boolean值,如果成立则返回true,否则返回false —– > = <= == !=
double d1=10;System.out.println(d1>3);//返回true
==和=的区别
1.k=100:这是一个赋值计算,即将=右边的值赋值给左边的变量2.k==100:为比较操作,判断k的值是否为100,如果是返回true,否则返回false3.由于浮点数无法精确存放,所以判断k==1.0写法是错误的,正确应写为Math.abs(a-b)<1e-6.
逻辑运算符
用于表达多个条件之间的关系,例如年龄大于18并且小于65 age>18 && age<65
&&与运算,表示并且的关系
同真则真,其余为假
age>18 && age<65 age=25由于两个条件同时成立,所以结果为真
||或运算 表示或者的关系
同假则假,其余为真
age>18 || age18成立所以结果为true
!非运算,表示不是
非假则真,非真则假