JAVA_BASE--2数据类型和运算符

注明:准备把java系统的复习一遍,把以前的资料知识也整理一遍,加油!不要拖延!本文有些内容以前收集来自网络,谢谢各位大神!

一.Java语法基础

1.关键字

被Java语言赋予特定含义的单词,关键字的字母全部小写
另goto和const作为保留字存在,目前并不使用。main并不是关键字。

用于定义数据类型值的关键字: true false null
用于定义流程控制的关键字:
if else switch case default while do for break continue return
用于定义访问权限修饰符的关键字:private protected public
用于定义类,函数,变量修饰符的关键字:
abstract final static synchronized
用于定义类与类之间关系的关键字: extends implements
用于定义建立实例及引用实例,判断实例的关键字:
new this super instanceof
用于异常处理的关键字: try catch finally throw throws
用于包的关键字: package import
其他修饰符关键字: native strictfp transient volatile assert

2.标识符

就是给类,接口,方法,变量等起名字时使用的字符序列
组成规则:
1.英文大小写字母、数字字符、美元$、下划线_、人民币¥;
2.驼峰形式(首字母小写,第二个字母大写);
3.见名知意(变量名要有意义)

注意事项:不能以数字开头、不能是Java关键字、严格区分大小写!

3.常量

特殊的变量。在程序执行的过程中其值不可以发生改变。
分类:字面值常量、自定义常量。

自定义常量优点:比较安全
final常量定义时推荐做法:
(1)常量名通常大写【命名:名称全部大写
(2)不同字符使用下划线分隔【单词之间用下划线分隔】
(3)只能被赋值一次,通常定义时即对其初始化
final double CM_PER_INCH_1;
CM_PER_INCH_1 = 1.24;

常见常量:
字符串常量(用双引号括起来的内容)
整数常量(所有整数)
小数常量(所有小数)
字符常量(用单引号括起来的内容) 如:‘a’,’A’,’0’
布尔常量(只有true和false)
空常量null(数组部分)

Java针对整数常量提供了4种表现形式:二进制、八进制、十进制、十六进制。
二进制的整数以0b开头(0,1)
八进制的整数以0开头(0~7)
十进制(整数默认都是十进制)
十六进制的整数以0x开头(0~9, a,b,c,d,e,f(大小写均可))

注:现在的计算机系统很少用八进制的了。二进制表示法太冗长,所以在程序中一般喜欢用十六进制。

在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
正数的原码、补码、反码均相同,不需转换。负数的原码与反码、补码转换过程中,符号位固定为1。
负数的反码,符号位为“1”,数值部分按位取反。
负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1,也就是“反码+1”。
两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

4.变量

在程序执行的过程中,在某个范围内其值可以发生改变的量。
变量定义格式:数据类型 变量名 = 初始化值;
变量三要素:变量名+变量类型+变量值
变量名:用来唯一标识变量(自定义的)
变量类型:变量的数据类型
注:Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间

变量按被声明的位置划分:
局部变量:方法或语句块内部定义的变量
成员变量:方法外部、类的内部定义的变量

使用变量注意事项:
作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
初始化值:没有初始化值不能直接使用
在一行上建议只定义一个变量:可以定义多个,以逗号隔开,但是不建议 eg:short b2=8,b;

5.数据类型

在这里插入图片描述
注:引用类型中还有一种特殊的null类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是Java中没有指针这个说法。

计算机存储数据的基本单位:
字节(Byte)是:计算机文件大小的基本计算单位。
1个字节(Byte) = 8个位(Bit)
Bit意为“位”或“比特”,是计算机运算的基础;二进制中的一位,是二进制最小信息单位。二进位可以用来表示一个简单的正/负的判断,有两种状态的开关(如电灯开关)。
说明:在内存计算过程中,字节少的数据运算速度更快;在硬盘存储中,字节少的数据类型也可充分存入更多的数据。

数据类型说明(不同语言同类型所占字节不同)
四类八种基本数据类型:byte(-128~127) short int long float double char(2字节16位) boolean(1字节8位)在这里插入图片描述
(1)整数常量系统默认int类型声明long型常量必须在数字后面加‘l’或L ,如: long n1 = 88888888888L; //必须加l否则会出错
(2)浮点型常量(小数)系统默认double类型声明一个float型常量,则需在数字后面加 f 或 F,double类型无需。如:float f = 12.3f; //必须加f否则会出错;double d = 12345.6; //正确
(3)Java 字符采用 Unicode 编码,每个字符占两个字节16位,因而可用十六进制编码形式表示。Java语言中的一个字符char可以存储一个中文汉字,因为java语言中的字符占用两个字节。一个中文字符占两个字节,多个中文字组成字符串
注:Unicode是全球语言统一编码。
(4)boolean 类型适于逻辑运算,一般用于程序流程控制。
boolean 类型数据只允许取值 true 或 false ,不可以用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。
(5)byte、short在定义的时候,他们接收的其实是一个int类型的值。如果不再它们的范围内,就报错。
(6)基本类型与其对应的包装类类型(注意首字母大写)
Byte --> Byte
int --> Integer
long --> Long
double --> Double
char --> Character
(7) 因为布尔型变量就是用来表示真假的,在计算机内部用0和1就完全可以区分开,所以一个bit就可以用来表示布尔型变量了;一个byte有可能有64或者32或者8个bit,理论上来讲可以代表64个或者32个或者8个布尔型变量;
但是实际的虚拟机实现的时候,不会吝啬到这种程度,一般一个byte对应一个布尔型变量(为了节约内存,估计手机上的J2ME或者Android的JDK有可能实现成一个bit一个布尔型变量)

[两个正整数相乘有可能是负的,因为范围会溢出。这种情况和强制类型转换数值溢出时结果可能为负一个道理]:

6.数据类型转换:

1.boolean类型不能转换为其他的数据类型
2.自动类型转换/向上类型转换 即默认转换规则:(从小到大的转换)
满足条件:
①类型要兼容(整型和浮点型–>数值类型)
②目标类型要大于源类型(double > int)
byte,short,char—int—long—float—double
byte,short,char相互之间不转换,他们参与运算首先自动转换为int类型。
eg1: byte e;e=3+7;(3+7赋值号右侧仅是数值计算,程序可自行判断其是否在byte范围内,故可以直接赋值给e)
eg2: short a=1; byte b=2; int c,e;short d=8;
c=a+b;b=(byte)(a+3);c=a+5;e=a+d;d=(short)(a+d);
3.强制类型转换/向下类型转换:
目标类型 变量名=(目标类型)(被转换的数据);

强制类型转换只舍不入(会丢失精度).

总结:那么,我们到底用那种转换呢?
一般建议,最好不要随意使用强制类型转换,容易造成数据精度的损失。
(1)容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
(2)有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

强制类型转换数值溢出时,如何计算实际赋值?
先转为二进制机器码;取目标类型字节二进制位数作为__补码__;查看最高符号位是0还是1判断正反。符号位是0时,即正数,直接二进制转十进制ok;如果符号位是1时,是负数,符号位1不变,数值位 减一取反 得到原码,转为十进制ok。

A:下面两种方式有区别吗?
  float f1 = 12.345f;
  float f2 = (float)12.345;

答案:有区别:f1其实是通过一个double类型转换过来的;而f2本身就是一个float类型。

B: short s=6, s = s+8; short s=6, s+=8;
上面两个代码有没有问题,如果有,那里有问题?
【short s=6, s =(short)( s+8); short s=6, s+=8;】

C: byte b1=6; short b2=8,b; b=b1+b2; b=6+8;
哪句是编译失败的呢?为什么呢?
【byte b1=6; short b2=8,b; b=(short)(b1+b2); b=6+8;】
常量相加,先把结果计算出来,然后看是否在目标类型的范围内,如果不是才报错。

D: byte b = (byte)130;
byte c=(byte)160;
System.out.println(b);
System.out.println©;
答案:
-126
-96

+加号的几种作用
加法;正数;字符串连接符【字符串与其他数据类型连接结果还是一个字符串】
例如:”hello”+34 结果为”hello34”

另输出语句中:
a.字符串以双引号括起来,字符型以单引号括起来;
b.字符串与其他数据类型以+连接一起输出时,+表示串联,结果还是一个字符串;
c.转义字符与字符串以+连接一起输出时,与字符串一起以双引号括起来,转义字符按其意义输出;
d.转义字符与数值类(int/浮点/char)以+连接一起输出时即无字符串时,以单引号括起来,+是加法运算,转义字符按其ASCII码值输出。 ‘a’ 97, ‘A’ 65 ,‘0’ 48
e.字符串连接中有加法运算时,用()括起来。
System.out.println(“计算结果是:”+(n1+n2+n3));
System.out.println(“计算结果是:”+num/5);

7.Scanner的使用

在程序运行中,如何接收用户键盘输入的值?
步骤:
1、导入Scanner类
在类的定义之上进行导入
import java.util.Scanner;
2、创建Scanner对象
Scanner sc = new Scanner(System.in);
3、获得键盘输入的数据
int age = sc.nextInt(); //获得一个整型数值
String name = sc.next(); //获得一个字符串
double score = sc.nextDouble();//获得一个双精度类型数值
char gender=sc.next().charAt(i); //获得输入的字符串中第(i+1)个字符
boolean bl = sc.hasNext(); //hasNext()或nextBoolean(),判断是否有输入数据。如果有输入数据,则返回true;否则返回false。不需要键盘专门输入,判断的是前一个是否有输入值。

Scanner类的nextLine()方法的使用:
当使用nextInt()时,敲回车后系统会获取到回车前的所有字符,但是会保留\r(回车)在缓冲区。当使用nextLine()【可识别空格字符及各种转义字符】获取数据时,也会捕获到前面的\r,将\r返回。
解决方案:
将nextLine作为首次输入
首先处理nextLine()后再处理nextInt()等
②将\r过滤掉即可
在输入nextInt()或者nextDouble()等等后紧跟着换行再使用一次nextLine(),将\r获取掉,当然此获取内容没有价值不做使用。。

8.运算符

1.赋值运算符(=)
变量名 = 表达式; //从右往左赋值
基本的算术运算【遵循自动数据类型转换】:+、-、*、/、%、++、–
复合赋值运算符【程序自动强制数据类型转换】:+=、-=、*=、/=、%=

2.关系运算符 ==、>、<、>=、<=、!=

3.逻辑运算符 (优先级别! > && > ||)
&&(and)、||(or)、非!、
&、|、^
【“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )-------相同为假,不同为真
0-假 1-真】

4.条件/三目/三元运算符
条件 ? 表达式1 : 表达式2
如果条件成立(true)则执行表达式1,否则(false)执行表达式2。
注:表达式1和表达式2的类型必须一致

算术运算符 > 关系运算符 > 逻辑运算符

9.转义字符

在这里插入图片描述
字符型常量所表示的值是字符型变量所能包含的值。
我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。‘A’, ‘\x2f’, ‘\013’;
其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。例如十进制的17用十六进制表示就是’\x11’,用八进制表示就是’\21’;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值