Java基础(二)

变量

数据类型:Java是一种强类型编程语言

生命周期:有效范围。Java提供了垃圾回收机制

Java中的数据类型可以分为两大类型:基本类型【原生】和引用类型【复杂】

基本类型

4型8种

整型:byte 1、short 2、int 4、long 8

  • Java采用补码的方式存储数据 。
  • 4种不同的表示方法:十进制、0八进制、0x十六进制、0b二进制
  • 在使用字面量,Java中的整数默认类型就是int,如果想表示long则在数值末尾添加l/L,一般建议使用L

浮点数:float 4、double 8

  • 在Java种浮点数无法精确存放,除非使用Java提供的类BigDecimal

     不允许使用等值==判断,应该使用Math.abs(a-b)<1e-6
    
  • 字面量的表示方式:十进制123.0、科学计数法1.23e2,注意e后面只能是整数

     数值末尾使用f/F表示float,使用D/d表示double
    

字符类型 char char c=‘中’;注意是单引号,不是双引号

  • Java中字符采用的是Unicode编码字符集,2B,对应的整数为0-65535
  • 字符类型的变量可以当作整数使用
  • ‘0’<‘A’<‘a’
  • Java中提供了转意字符,以反斜杠开头
    \ddd 1-3位的8进制数对应的字符
    \uxxxx 1-4位的16进制数对应的字符
    \’表示单引号
    \”表示双引号
    \表示反斜杠字符

布尔类型 boolean

  • 只有两个数值:true表示真,false表示假
  • 在Java中整型数据和boolean值之间没有转换关系
//整型数的进制转换
 int  kk=123;
		   //将十进制转化为8进制
		   System.out.println("0"+Integer.toOctalString(kk));
		//将十进制转换为16进制
		   System.out.println("0x"+Integer.toHexString(kk));
		   //将十进制转换为2进制
		   System.out.println("0b"+Integer.toBinaryString(kk));

常见的数学计算`

  
		   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(k1,0.5));//对k1开方
		   k1=-123;
		   System.out.println(Math.abs(k1));//绝对值
		   System.out.println(Math.max(k1, dd));//求两数的较大值
		   System.out.println(Math.min(k1, dd));//求两数的较小值
		   
		   dd = 3.45;
		   System.out.println(Math.ceil(dd));//天花板 4
		   System.out.println(Math.floor(dd));//地板 3
		   
		   dd = -3.45;
		   System.out.println(Math.ceil(dd)); //-3
		   System.out.println(Math.floor(dd)); //-4
		   
		   //四舍五入,注意考核中的坑在于对负数的处理
		   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());

除了简单计算之外,还有指数,对数,三角和反三角函数等方法的封装。

字符类型的基本使用

char c='a';
		System.out.println(c);//a
		c++;//给c+1;计算结果等价于c=c+1,但这里涉及数据类型转换的问题,所以c=c+1会语法报错
		System.out.println(c);//b
		//将字符类型转换为整数
		System.out.println((int)c);//98
		c='中';
		System.out.println(c+"===="+(int)c);//中====20013
		//转义字符
		System.out.println('\123');// s
		int kk=0123;//0开头表示8进制
		System.out.println((char)kk);//s
		System.out.println('\u9110');
		kk=0x9110;
		System.out.println((char)kk);
		char cc='\\';
		System.out.println(cc);// \
		System.out.println((int)cc);// 92

基本数据类型转换

小转大自动转,大转小需强转 窄化操作

//小转大
byte b1 = 123;//自动识别123位byte类型,但是如果超出范围则自动报错
long k = b1;
double k2 =k1;
//大转小
double d1=123.456;
long k1 = d1;//语法错误
long k2 = (long)d1;

强制类型转换的语法(目标类型)变量
注意:boolean类型和数值类型之间没有任何关系,所以进行强制类型转换会包语法错误。

浮点数的特殊处理
针对浮点数系统默认的是double型,但是变量f1声明为float,所以这里需要进行数据类型转换或进行特殊声明。

double d1 = 123.456;
		//long k1 = d1;
		long k1 = (long)d1;//强制类型转换
		System.out.println(k1);//使用强制类型转换可能会导致精度缺失
		
		//针对浮点数的特殊处理
		//float f1=123.456;语法错误,type mismatch;cannot conver from double to float
		float f1 = 123.456f;
		float f2 = (float)123.456;

复合数据类型

复合数据类型包括:类class、接口interface、数组
特殊值null,在运行时并没有对应的类型,但是它可以被转换为任何复杂类型,表示没有存储数据,但是不能赋值给简单类型
复合类型的默认值就是null空指针

Object bb;//定义变量bb为复合数据类型object,object类是系统预定义
	//System.out.println(bb);这里报错是因为要去临时变量必须先定义后使用,
	//必须先赋初值后使用
	bb = null;
	System.out.println(bb);

常量

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

final double PI = 3.1415;
PI=PI+1;//这里语法报错是因为PI是常量,不允许修改

表达式

表达式就是运算符、操作数以及方法的调用序列,用来说明某个计算过程并返回计算结果。

基本运算符可以分为:算术运算符、关系运算符、位运算符、条件运算符

  • ·算术运算符+ - * / % ++ –
  • 关系运算符> >= < <= ==等值 !=不等于
  • 逻辑运算符 &&与运算,表示并且的关系,
    ||或运算,表示或者的关系,
    !非运算,表示不是,
    重点在于计算过程中支持短路操作
  • 位运算 &与 |或 ^异或 ~按位取反
    <<左移位 >>右移位 >>>,基本不做要求,位运算符不支持短路操作
  • 赋值运算符 = += -= /= %=
  • 三目运算符(表达式1?表达式2:表达式3)

算数运算符

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

//Integer.MAX_VALUE最大整数
	int k = 2000000999;
	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 static void main(String[] args) {
int k = 2000000999;
System.out.println(reverse(k));}
	public static int reverse(int x){
	
	long res = 0;
	while(x>0)
	{
		int p=x%10;
		x=x/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);

==和=的区别

==是比较计算,=是赋值计算

逻辑运算符

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

&&与运算,表示并且

同真则真,一假则假
age>18 && age<65 age = 34两个条件同时成立,则计算结果为真

||或运算,表示或者

同假则假,其余为真
age>18 && age<65 age=98 由于满足age>18 则计算结果为true

!非运算,不是否则

非假则真 非真则假

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

A||B,如果条件A为true,则不需要计算B的结果,因为结果一定为true,计算结果和B的值没有关系

int age =100;
char cc = 'a';
System.out,println(cc+"...."+(int)cc);
System.out.println('B'+"...."+(int)'B');
if(cc>='B'&& age++<200)
		System.out.println("xxxxx");
System.out.println(age);

赋值运算符

= += -= *= /= %=
k =k+7可以简化为k+=7

考点

short k=8;
k=k+8;//语法错误。因为k+3中的3倍系统识别为int类型,所以计算结果自动转换为int。但是int类型的数据不能直接赋值给短整型的变量。这里代码可以修改为k=(short)(k+3)

//另外写法
short k = 3;
k+=3;
//这里可以直接运行,不需要手动转换

结构化编程

条件分支语句
java提供了两种判断语句if和switch,这两种语句用于实现条件判断,当符合某些条件时执行某段代码
if 语句

if(条件判断语句){
代码段;
}

if(条件判断语句){
代码段1;}
else{
代码段2;}

if(条件1){
代码段1;}
else if(条件2){
代码段2;}
else if…{
代码段n;}
else{
代码段n+1;}

需求:要求输入学生性别,如果false则显示女

Scanner sc = new Scanner(System.in);
	boolean bb = sc.nextBoolean();
	if(bb==false){
		System.out.println("性别为女");
	}

需求:输入学生成绩,假设成绩都是整数,如果>60就是及格否则就是不及格

Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();
		if(score>60)
		{
			System.out.println("成绩及格");
		}
		else{
			System.out.println("成绩不合格");
		}

需求:输入学生成绩,假设成绩都是整数 如果>=85显示优秀,>=70成绩良好,>=60成绩及格,否则显示不及格

Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();
		if(score>=84)
			System.out.println("成绩优秀");
		else if(score>=70)
			System.out.println("成绩良好");
		else if(score>=60)
			System.out.println("成绩及格");
		else
			System.out.println("成绩不及格");

问题:这里的判断顺序不能调换,例如不能先判断>=70,再判断>=85

开关分支语句

switch(表达式){
		case1:
		代码块1breakcase1:
		代码块1break....
		default:
		代码块 }

需求:输入月份,显示对应本月的天数

System.out.println("请输入月份:");
		Scanner sc = new Scanner(System.in);
		int month = sc.nextInt();
		switch(month){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			System.out.println("本月有31天");
			break;
		case 2:
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		if((year%4==0 && year%100!=0)||(year%400==0))
			System.out.println("本月有29天");
		else
			System.out.println("本月有28天");
		break;
		case 4:
		case 6:
		case 9:
		case 11:
			System.out.println("本月有30天");
		break;
		}

循环结构
循环语句也叫迭代语句,在Java中存在 while 、for、do…while

while(条件){执行语句;} 当条件成立时立即反复执行语句,直到条件不成立为止

int res = 0;
int k =1;
	while(k<=100){
		res+=k;
		k++;
	}
	System.out.println("1+2+3+...+100="+res);

写法1

int res = 0;
int k =0;
	while(k++<100){
		res+=k;
	}
	System.out.println("1+2+3+...+100="+res);

写法2

int res = 0;
int k =0;
	while(++k<=100){
		res+=k;
	}
	System.out.println("1+2+3+...+100="+res);

写法3

int res = 0;
int k =1;
	while(true){
		res+=k;
		if(++k>100)
		break;
	}
	System.out.println("1+2+3+...+100="+res);

break和continue的用法
需求:计算100以内的奇数和
最直接的思路,奇数相加,偶数跳过;

int res = 0;
int k = 0;
		while(true){
			if(++k>100)
				break;
			if(k%2==0)
				continue;
			res+=k;
		}
		System.out.println(res);

do while循环
先执行循环体,然后进行条件判断,如果结果为true。则执行下次循环;如果条件为false则终止循环,不同于while循环的特征是:do/while至少执行一次,而while循环有可能一次都不执行。

do{
循环体;
}while(条件)
实现

int res = 0;
	int k =1;
	do{
		res+=k++;
	}while(k<=100);
	System.out.println(res);

for循环
基本执行流程:
执行表达式1,再执行表达式2(一般表达式是一个条件判断语句),如果值为true则执行循环体,否则终止循环,执行完循环体再执行表达式3,再次执行表达式2。以判断是否执行循环体。在此次循环过程中表达式1只执行一次。

for(表达式1;表达式2;表达式3)
{循环体;
}

int res =0;
		for(int k = 0;k<=100;k++){
			res+=k;
		}
		System.out.println(res);

特殊写法:在这里表达式1、2、3都不是必须的

写法1int res = 0;
		int k = 0;
		for(;k<=100;k++)
		{
			res+=k;
		}
		System.out.println(res);
写法2int res = 0;
		int k = 0;
		for(;k<=100;)
		{
			res+=k++;
		}
		System.out.println(res);
写法3int res = 0;
		int k = 0;
		for(;;)//死循环
		{
			res+=k++;
			if(k>100)
				break;
		}
		System.out.println(res);

循环的总结
实际上三种循环可以相互替换

  • for循环一般用于明确次数的场景中
  • while循环一般用于不能明确知道执行次数的场景中
  • do/while循环一般用于不能预先明确执行次数,但同时要求玄幻提至少执行一次的场景中

系统预定义类

Java5添加了java.until.Scanner类,这是用于扫描输入文本的新实用程序
nextInt()只读取int值,就是只读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。nextFoalt nextDouble这些也是以此类推,只能读取符合该类型的数据

Scanner sc = new Scanner(System.in);
	System.out.println("你的年龄是多少:");
	int age = sc.nextInt();
	System.out.println("年龄:"+age);
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值