Java基础(2)

变量

数据类型:Java是一种强类型编程语言
生命周期:有效范围
Java提供了垃圾回收机制

int k=100;

Java中的数据类型可以分为两大类型:基本类型和引用类型(或者原生类型和复杂类型)

基本类型(4型8种)

整型

(1) byte: 大小为1B,具体范围为-128~127

(2) short: 大小为2B,具体范围为-32768~32767

(3) int: 大小为4B,具体范围为-2147483648~2147483647,科学计数法可记为2x10e9

(4) long: 大小为8B,具体范围为-9223372036854775808~9223372036854775807,科学计数法可记为9x10e18

①Java采用补码的方式存储数据

②四种不同的表示方式:十进制、0 八进制、0x 十六进制、0b 二进制

//整型数的进制转换
int k = 789;
//将十进制数转化为2进制
System.out.println("0b"+Integer.toBinaryString(k));
//将十进制数转化为8进制数
System.out.println("0"+Integer.toOctalString(k));
//将十进制数转换为16进制数
System.out.println("0x"+Integer.toHexString(k));

③使用字面量时,Java中的整数默认类型是int,如果想表示long则在数值末尾加l/L,一般建议使用L

浮点数

(1) float: 大小为4B
(2) double: 大小为8B

  • 在Java中浮点数无法精确存放,除非是用Java提供的类BigDecimal
  • 不允许使用等值==进行判断,应使用Math.abs(a-b) < 1e-6进行差值判断
  • 字面量的表示方式:十进制999.0、科学计数法1.56e3,注意e后面只能是整数
  • 数值末尾使用f/F表示float,使用d/D表示double

字符类型 char

char = ‘中’ 注意:使用单引号

  • Java中字符采用的是Unicode编码字符集,2B,对应的整数为0-65535
  • 字符类型的变量可以当做整数使用
  • ‘0’<‘A’<‘a’
  • Java中提供了转意字符,以反斜杠开头

    \ddd 1-3位的8进制数对应的字符
    \uxxxx 1-4位的16进制数对应的字符
    \ ’ 表示单引号,不允许 ’ ’ ’
    \ " 表示双引号
    \ \ 表示反斜杠字符

布尔类型 boolean

  • 只有两个数值:true表示真,false表示假
  • 在Java中整型数据和boolean值之间没有转换关系

常见的数学计算

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)); // -3
dd = -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 from double to long
long 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;语法报错,Type mismatch: cannot convent from double to float
float f1 = 123.456f; // f/F表示单精度浮点数,d/D表示双精度浮点数
float f2 = (float)123.456;

复合数据类型

复合数据类型包括:类class、接口类型interface、数组

特殊值null,在运行时并没有对应的类型,但是它可以被转换成任何复杂类型,但是不能赋值给简单类型

复合类型的默认值就是null空指针

public class Test {
	public static void main(String[] args) {
			Object b;// 定义变量b为复合类型Object,Object类时系统预定义
			// System.out.println(b); 这里报错是因为要求临时变量必须先定义后使用,必须先赋初值后使用
			b = null;
			System.out.println(b);
		}
	}

常量

常量就是指在程序执行的期间其值不能发生变化的数据

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); // 输出结果为1.22,小数部分不参与除法计算

++和--是单目运算符
i++计算结果等价于i = i + 1,i--结果等价于i = i - 1;

有两种写法:以++为例,--写法实际相同
i++是先获取i的值,然后针对i执行加1操作
    int age = 99;
	System.out.println(age++);//输出值为99
	System.out.println(age);//没有任何运算符,但输出值为100

++i是先对i执行加1操作,然后再获取i存储的数据
	int age = 99;
	System.out.println(++age);//输出值为100,是因为先执行加1再获取数据
	System.out.println(age);//输出值为100

问题:将一个任意正整数进行反转,如果数值越界则返回-1.

  • 最大整数Integer.MAX_VALUE,最小整数Integer.MIN_VALUE — 常量
public class Test {
	public static void main(String[] args) {
		int k=1000088888;
		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 A{
public static void main(String[]args){
    int k=1000088888;
    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; //因为res声明的类型是long类型,但是返回类型应该是int,所以需要进行强制类型转换
}

关系运算符

用于判断两个数据之间的大小关系,计算结果就是boolean值,如果成立则返回true,否则返回false ----- > < >= <= == !=

double d1=10;
System.out.println(d1>3);//返回true

==和=的区别

  1. k=100:这是一个赋值计算,即将=右边的值赋值给左边的变量

  2. k==100:为比较操作,判断k的值是否为100,如果是返回true,否则返回false

  3. 由于浮点数无法精确存放,所以判断k==1.0写法是错误的,正确应写为Math.abs(a-b)<1e-6

逻辑运算符

用于表达多个条件之间的关系,例如年龄大于18并且小于65 age>18 && age<65

&&与运算,表示并且的关系

同真则真,其余为假

age>18 && age<65 age=25由于两个条件同时成立,所以结果为真

||或运算 表示或者的关系

同假则假,其余为真

age>18 || age<65 age=125由于age>18成立所以结果为true

!非运算,表示不是的关系

非假则真,非真则假

重点:短路计算

例如:A&&B,如果条件A为false,这里不管B的值为true还是false,则计算结果一定为false,因此计算结果和B的值没有关系,所以执行真正计算时B并不执行,而是直接返回false。

A||B,如果A为true,则不需要计算B的结果,其结果一定为true,计算结果与B的值无关

public class Test {
	public static void main(String[] args) {
		int age=99;
		char c='A';
        System.out.println(c+"---"+(int)c);
		System.out.println('B'+"---"+(int)'B');
		if(c>='B'||age++<200)//第一个表达式为false,所以第二个表达式必须进行计算
			System.out.println("xxxxxxx");
		System.out.println(age);
	}
}
输出结果:
A---65
B---66
xxxxxxx
101

赋值运算符

= += -= *= /= %=

int k=10,将10赋值存储在k对应的存储单元中

k=k+3可以简化为k+=3,其他的运算含义一致

重点

short k=3;
k=k+3;//语法错误,因为k+3中的3被系统识别为int类型,所以计算结果自动转化为int,但是int类型的数据不能直接赋值给短整型的变量

//另外写法
short k=3;
k+=3;  //这里可以直接运行,不需要手工转换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值