基本运算符
public class Demo01 {
public static void main(String[] args) {
byte num1 = 10; //1字节
short num2 = 20;//2字节
int num3 = 30;//4字节
long num4 = 40L;//8字节
float num5 = 3.14F;//4字节
double num6 = 3.1415;//8字节
char num7 = 'A';//2字节
char num8 = '我';
boolean num9 = true;//1位
}
}
整数拓展
进制表示
整数拓展–进制: 二进制 0b、十进制、八进制 0、十六进制 0x
int num1 = 10;
int num2 = 010; //十进制的 8
int num3 = 0x10; //十进制的 16
浮点数
//浮点数拓展: float 有限、离散、舍入误差、大约、接近但不等于
//最好完全避免使用浮点数进行比较
//银行业务—BigDecimal: 数学工具类
float f1 = 0.1f;
double f2 = 1.0/10;
System.out.println(f1 == f2);//false
float f3 = 2131313231313f;
float f4 = f3 + 1;
System.out.println(f3 == f4);//true
字符
所有的字符本身还是数字
char c1 = 'a';
System.out.println((int)c1);//97
char c2 = '中';
System.out.println((int)c2);//20013
char c3 = '\u0061';
System.out.println(c3);//a
字符串
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);//false
String s3 = "hello";
String s4 = "hello";
System.out.println(s3 == s4);//true
类型转换
byte、short、char —> int —> long —> float —> double
int -->float、long -->float、long -->double 可能会有精度损失
int num1 = 128;
byte num2 = (byte) num1;//-128: 大转小,强制转换,内存溢出
//不能对布尔值转换
//不能把对象类型转换为不相干的类型
//高容量转低容量时强制转换,存在内存溢出或者精度问题
System.out.println((int)23.7);//23
System.out.println((int)-23.7);//-23
//操作比较大的数,JDK7新特性,可用下划线分割
int money = 10_0000_0000;
System.out.println(money);//10 0000 0000
int years = 20;
long total = money * years;//等式右边默认是int,转换之前已经出问题了
System.out.println(total);//-1474836480
long total2 = money * ((long)years);//运算前先转化long,
//或者long total2 = 1L * money * years;
System.out.println(total2);//20 0000 0000
变量
局部变量
方法或语句块内部,声明位置开始,方法执行结束
成员变量(实例变量)
类内部,方法外,成员变量跟随对象的创建、消失
数值类型默认0或者0.0,字符型默认u0000,布尔值默认false,除了基本类型其他都是null
静态变量(类变量)
类内部,static修饰,静态变量随类的加载、卸载而创建、消失
public class Demo01 {
//类变量(静态变量)
static double salary = 2500;
//实例变量(成员变量):从属于对象,数值类型默认0或者0.0,字符u0000,布尔值默认false,除了基本类型其他都是null
String name;
int age;
char c;
//main方法
public static void main(String[] args) {
//实例变量不可以直接使用,需要先声明对象,在使用
Demo01 demo = new Demo01();
System.out.println(demo.age);//默认值0
System.out.println(demo.name);//默认值null
System.out.println(demo.c);//默认u0000
//类变量可直接使用
System.out.println(salary);
}
//其他方法
public void add(){
}
}
常量
final 关键字的作用:
- 修饰变量:不可赋值;
- 修饰方法:不可重写,可重载;
- 修饰类:不可被继承。
static:是修饰符,不存在先后顺序
public class Demo02 {
static final double PI = 3.14;//final 常量不可变
final static double PL = 3.15;
public static void main(String[] args) {
System.out.println(PI);//3.14
System.out.println(PL);//3.15
}
}
运算
没long、double 都转化成int
public static void main(String[] args) {
long a = 123213123123L;
int b = 10;
short c = 20;
byte d = 30;
double e = 3.12;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d+e);//double
System.out.println(b+c+d);//int 没long、double 都转化成int
System.out.println(c+d);//int
}
自增、自减
public static void main(String[] args) {
int a = 3;
int b = a++;//先用再加
int c = ++a;//先加再用
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
double pow = Math.pow(a, b);
System.out.println(pow);
}
短路运算
只通过左边运算就可以判断结果,不执行右边操作,提高效率
短路与:false && * ----false
短路或:true || * ----true
public static void main(String[] args) {
boolean a = false;
boolean b = true;
//短路运算
System.out.println(a && b);//此处没有执行b
}
运算符
算数运算符比关系运算符高,关系运算符比位运算和逻辑运算符高,非大于与,与大于或
a || b && c ---->a || (b && c)
构造器
构造器用于对象的初始化,通过new关键字调用
创建对象四步
//1.分配对象空间,并将对象成员变量初始化为0或空
//2.执行属性值的显式初始化
//3.执行构造方法
//4.返回对象的地址给相关的变量
public class Demo01 {
double x, y;
//构造器
Demo01(double x, double y){
this.x = x;
this.y = y;
}
//获取两点距离
public double getDistance(Demo01 p){
return Math.sqrt((x-p.x) * (x-p.x) + (y-p.y) * (y-p.y));
}
public static void main(String[] args) {
Demo01 p1 = new Demo01(3.0,4.0);
Demo01 p2 = new Demo01(0.0,0.0);
System.out.println(p1.getDistance(p2));
}
}