Java基本数据类型、数据类型转换、常量声明规范和final关键字

一、基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
1、整型byte 、short 、int 、long
2、浮点型float 、 double
3、字符型char
4、布尔型boolean

1.1 整型(byte、short、int、long)

虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围可不一样。
1.byte 的取值范围:-128~127(-2的7次方到2的7次方-1)
2.short 的取值范围:-32768~32767(-2的15次方到2的15次方-1)
3.int 的取值范围:-2147483648~2147483647(-2的31次方到2的31次方-1)
4.long 的取值范围:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

1.2 浮点型(float、double)

float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。
1.float(单精度浮点型)取值范围:3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方)
2.double(双精度浮点型)取值范围:1.797693e+308~4.9000000e-324(同上)

double 类型比float 类型存储范围更大,精度更高。
通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据时float 型的,可以在数据后面加上 “F” 。
浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这时正常的。

1.3 字符型(char)

char 有以下的初始化方式:

char ch = 'a'; // 可以是汉字,因为是Unicode编码
char ch = 1010;// 可以是十进制数、八进制数、十六进制数等等。
char ch = '\0'; // 可以用字符编码来初始化,如:'\0' 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思。
1.4 布尔型(boolean)

boolean 取值:true 、false 。

二、Java数据类型转换

数据类型的转换,分为自动转换和强制转换。自动转换不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。

2.1 自动数据类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高

byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数1类型

操作数2类型

转换后的类型

byte、short、char

int

int

byte、short、char、int

long

long

byte、short、char、int、long

float

float

byte、short、char、int、long、float

double

double

自动转换也要小心数据溢出问题,看下面的例子。

int count = 100000000;
int price = 1999;
long totalPrice = count * price;

编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。

int count = 100000000;
int price = 1999;
long totalPrice = (long) count * price;

另外,向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换。

2.2 强制数据类型转换

强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确。

   public class Demo {

   public static void main(String[] args){

   int x;

   double y;

   x = (int)34.56 + (int)11.2;  // 丢失精度

   y = (double)x + (double)10 + 1;  // 提高精度

   System.out.println("x=" + x);

   System.out.println("y=" + y);
   }
}

三、常量的声明规范

**定义:**常量通常指的是一个固定的值,被final修饰的变量,初始化一次后,就不能再次更改其值。
在为所有的对象共享时,常量时非常有用的。

声明常量,实例代码如下:

final double PI = 3.1415926D; //声明double型常量PI并赋值
final double BOOL = true; //声明double型常量BOOL并赋值

定义的一般规则,类名首字母全部大写,常量全部大写用下划线分隔,变量用驼峰形式。注意使用long赋值用L时不能写小写的L要写大写的,不然会和数字“1”傻傻分不清。

public class Client{

public static final int SUM_PEOPLE_NUMBER = 2;

public static void main(String[] args){
    String studentName = "wang";
    long number = 1L;
  	}
}

四、Java中的static和final关键字

4.1 static

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用–废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块

4.1.1 static变量
按照是否静态的对类成员变量进行分类可分两种:

  • 一种是被static修饰的变量,叫静态变量或类变量

  • 另一种是没有被static修饰的变量,叫实例变量。
    两者区别:

  • 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

  • static是不允许用来修饰局部变量

private是访问权限限定,static表示不要实例化就可以使用

在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
4.1.2 static修饰方法
static修饰的方法不需要针对某些对象进行操作,其运行结果仅仅与参数有关,调用的话直接用类名就可以调用了。因此static方法中不能对非static成员进行访问。
4.1.3 static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内。
JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
在类加载期间执行并且只执行一次,可以用来加载静态资源。(如图片、音频和视频等文件)。

4.2 final

4.2.1 final变量
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。

  • 首先,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。

  • 然后,final修饰的成员变量,我们有且只有两个地方可以给它赋值,一个是声明该成员时赋值,另一个是在构造方法中赋值,在这两个地方我们必须给它们赋初始值。

4.2.2 final方法

  • 表示该方法无法被重写,但是能被继承。

4.2.3 final类

  • 用final修饰的类是无法被继承的。

final类不能被继承,因此final类的成员方法没有机会被重写,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

4.3 static和final一块用表示什么

static final用来修饰成员变量和成员方法,可简单理解为全局常量

  • 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
  • 对于方法,表示不可覆盖,并且可以通过类名直接访问。
    引用参考:
  1. http://www.runoob.com/java/java-modifier-types.html
  2. https://www.cnblogs.com/linkstar/p/5228054.html
  3. https://www.cnblogs.com/xuyunqi/p/7875998.html
  4. https://blog.csdn.net/zhangyanli0414/article/details/79008681
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值