初识Java【2】——基础入门与数据类型

初识Java【2】——入门与数据类型

前言

本节将介绍Java的入门知识及数据类型相关知识,内容比较基础,但是细节颇多,部分数据类型在使用上容易跟C语言混淆,导致一些不应该的错误,各位读者需小心谨慎。

一、入门知识

在正式介绍数据类型之前,需要对一些零基础的读者进行扫盲。请各位读者自行阅读下方这段代码。

public class MyFirstJava {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

//-----------------------------------------------
// 输出结果为:Hello World!

Hello World!逐行解析

(1)第一行代码public class MyFirstJava {

这行代码由三个部分组成。

首先,public访问修饰符,这个修饰符表示的意思:在工程中任意位置都可以对类进行访问。(关于访问修饰符 和 类,各位读者暂时别深究,笔者之后的文章将慢慢介绍到。)

其次,class这个关键字就代表将定义一个类

最后,也是目前最值得我们注意的就是:MyFirstJava。这是Java文件的类名类名一般以大驼峰的形式书写,通常来讲一个Java文件中最好只放一个类。而一个Java文件只能有一个public class,且其类名必须与Java文件相同。

(2)第二行代码public static void main(String[] args) {

这行代码由五个部分组成。其中public已经在上方简单介绍过了。

static这个关键字,表示静态的。如果被static修饰则表示其生命周期将延长至整个类结束,而被它修饰的数据会被放在方法区

void是一种特殊的数据类型,表示返回值为空,也就是无返回。

main是表示方法是主方法,是整个程序最先开始运行的地方

String[] args是:运行时命令行参数。

(3)第三行代码System.out.println("Hello World!");

这一行代码就是Java的输出,其作用跟C语言中的printf一样,不过println会自动换行。
如果不想换行直接println替换成print即可;如果想要像C语言那样格式化输出println替换换成printf,然后在括号中进行格式化内容的编写。

System.out.println(a);         // 打印且换行
System.out.print(a);           // 打印但不换行
System.out.printf("%d\n",a);   // 以格式化的形式输出内容

关于输出内容:如果是常量则需要用" "引起来。当我们想同时打印多个数据时,可以使用+的方式。关于+我们需要注意的是:一旦拼接内容中有字符串,那么数据最后的输出类型就会变成字符串类型,哪怕引号中内容为空

public class MyFirstJava {
	public static void main(String[] args) {
		int a = 5201314; // 定义并初始化整型变量 a 为 5201314
		System.out.println("Hello World! " + a);
		
		// 请各位读者自行对比一下两种方式的区别
		int b = 1;
		System.out.println("Hello World! " + a + b);
		System.out.println("Hello World! " + (a + b) );   // 如果不想直接凭借就用()
	}
}

//-----------------------------------------------
// 输出结果为:Hello World! 5201314     (这是一个字符串)
// 输出结果为:Hello World! 52013141    (这是一个字符串)
// 输出结果为:Hello World! 5201315     (这是一个字符串)

上方代码中出现的ab就属于变量,我们接下来要讨论的数据类型也是针对变量的变量名可以由:字母、数字、下划线、$ 组成,其中变量名不能以 数字 开头命名。通常来讲:变量需要以字母为开头且以小驼峰的形式命名。形如:dataType

二、数据分类

在这里插入图片描述

1.数据分类

由上图可知,Java分成两个大类:基本类型和引用类型。在Java面试中经常被问到的问题:Java中的八大数据类型是什么?(答案就在上图)这里最容易漏掉的就是byte类型,没错,Java有字节类型的数据

受篇幅限制,本文将不会对引用类型进行介绍,笔者后期将专门介绍各个引用类型,欢迎各位读者关注。

2.关于默认值

与C语言不同,Java中的数据存放在堆区。而堆区上的数据是设有默认值的。其中以下两个类型的数据默认值值得注意:
(1)字符型
Java采用Unicode的字符编码方案。跟C语言采用的只包含128个字符的ASCII码不同,Unicode编码占用2个字节,8个比特位,其访问范围更大,其内容甚至包含了大多数的中文、日文、韩文…而此处默认值\u0000意思是空格

(2)引用类型
各位读者看到的null,跟C语言中的null是有所不同的。C语言中的null代表指向了系统中不可用的0号地址(一个受保护的地址),而Java中的 null 跟 0号地址没有任何关联

三、基本类型细节要点

关于数据类型,读者需要了解的内容包括:各个类型的含义、字节大小 以及 包装类

1.整型

整型数据其实就是数学中的整数。之所以分成四个不同的类型,是因为不同类型所能表示的数值范围大小不一样。但是这并不意味着数值表示范围越大的数据类型越好,因为表示范围大也意味着:可能浪费的空间多

public class DataType {
	public static void main (String[] args) {
		int num1 = 1;
		short num2 = 2;
		long num3 = 3L;
		byte num4  = 128
	}
}

这里先统一介绍包装类的两个简单用法,下方就不再赘述了。

包装类.MAX_VALUE : 可以表示这个类的【最大值】
包装类.MIN_VALUE : 可以表示这个类的【最小值】

对于第五行的long类型变量,赋值时需要注意数字末尾必须加上L,这样才能被指定为长整型

(1)int类型
1)字节大小:4byte
2)包装类:Integer

public class DataType {
	public static void main (String[] args) {
		System.out.println(Integer.MAX_VALUE);   // 2147483647
        System.out.println(Integer.MIN_VALUE);   // -2147483648

		int num1 = Integer.MAX_VALUE + 1;
        System.out.println(num1);           // -2147483648
        int num2 = 2147483647 + 1;
        System.out.println(num2);           // -2147483648
	}
}

不知各位读者对num1num2的打印结果有没有一点惊讶。正常来讲,num1num2+1之后就超范围了,而结果是 -2147483648。原因就是:数据是以二进制形式进行+-的操作的。因此,数据就会成一个⚪来排列,如下图所示。
在这里插入图片描述
下方的short类型、long类型、byte类型同理,下面就不再画图了。

(2)short类型
1)字节大小:2byte
2)包装类:Short

public class DataType {
	public static void main (String[] args) {
		System.out.println(Short.MAX_VALUE);        // 32767
        System.out.println(Short.MIN_VALUE);        // -32768
        
        short num = (short)(Short.MAX_VALUE + 1);   
        System.out.println(num);                    // -32768
	}
}

(3)long类型
1)字节大小:4byte
2)包装类:Long

public class DataType {
	public static void main (String[] args) {
		System.out.println(Long.MAX_VALUE);      // 9223372036854775807
        System.out.println(Long.MIN_VALUE);      // -9223372036854775808
        
        long num = Long.MAX_VALUE + 1;
        System.out.println(num);                 // -9223372036854775808
	}
}

(4)byte类型
1)字节大小:1byte [-128,128)
2)包装类:Byte

public class DataType {
	public static void main (String[] args) {
		System.out.println(Byte.MAX_VALUE);        // 127
        System.out.println(Byte.MIN_VALUE);        // -128
        
        byte num = (Byte)(Byte.MAX_VALUE + 1);   
        System.out.println(num);                   // -128
	}
}

对整型的介绍大致如上,但还有一个小细节不知各位读者关注到了没有。只short类型、byte类型的num变量被强制类型转换了。原因是:不同类型的数据之间混合运算时,数据类型小的会被提升到数据类型大。

在对 short类型 及 byte类型 的num变量进行计算时,+1被当成int类型处理,因此Short.MAX_VALUEByte.MAX_VALUE会进行整型提升后,再跟+1进行混合运算。最后得到的结果当然也是int类型,如果不进行强制类型转换就直接将结果赋给 short类型 或 byte类型 编译器就会报错。

那么对于long类型计算时的+1又是如何处理的呢?这里的+1属于int类型,明显不如long类型那么大,此时+1就会被强制类型转换成long类型计算。最后结果赋给long类型的num当然就不需要强制类型转换了。

2.浮点型

(1)double类型
1)字节大小:8byte
2)包装类:Double

public class DataType {
	public static void main (String[] args) {
        double num = 12.5;           
        System.out.println(num);
        System.out.println(Double.MAX_VALUE);   // 1.7976931348623157E308
        System.out.println(Double.MIN_VALUE);   // 4.9E-324

        int a = 1;
        int b = 2;
        System.out.println(a / b);              // 0

        double c = 1.1;
        System.out.println(c * c);              // 1.2100000000000002
	}
}

Java中的double类型有3点值得注意:
A.只要是小数,就会默认是双精度类型
B.两个数必须有一个是小数才能保存小数
C.小数在内存的存储是有精度限制的!

(2)float类型
1)字节大小:4byte
2)包装类:Float

public class DataType {
	public static void main (String[] args) {
        float f = 12.3F; 
        System.out.println(f);
	}
}

Java中的float类型有2点值得注意:
A.如果是float类型的小数就必须在数字后面 +F
B.如果double类型强制转换成float类型可能会造成精度丢失,编译器会直接报错

部分读者注意到:int类型和 float类型本质上都是4byte,但为什么float类型的宽度更大。能够存储小数呢?原因是:存储方法不一样造成的。float类型是根据IEEE的标准存储。

3.字符类型

1)字节大小:2byte [0,65535]
2)包装类: Character

字符是没有负数的,因此char类型是从0开始计算的。

public class DataType {
	public static void main (String[] args) {
		char ch1 = 'a';
        System.out.println(ch1);

        char ch2 = '高';
        System.out.println(ch2);

        // Unicode字符集,包含的比 ASCII码 更多
        char ch3 = 97;
        System.out.println(ch3)
	}
}

4.布尔类型

1)字节大小:无明确大小
2)包装类:Boolean
3)取值:真为true; 假为false

public class DataType {
	public static void main (String[] args) {
        boolean flg = true;
        System.out.println(flg);
        // if(1)  --  报错!

		//-----------------------------------
		// 输出结果:true
	}
}

Java的boolean类型跟C语言中的不同。Java只能用truefalse来表示真假,而0!0不再能表示真假。

四、强制类型转换

只有两条规则需要特别注意:
1.不相干的类型不能进行强制类型转换 (主要指:不要把其他类型转成boolean类型)
2.发生混合运算过程时,小字节会自动转成大字节

结语

将各个数据类型梳理清楚之后就发现内容也不算很多。总结一下需要注意的点:

1. long类型数值需要+Lfloat类型数值需要+F
2. 当数值超出数据类型最大范围时,就会回到其最小值,同类超出最小值时,就会回到0。
3. 发生混合运算时,注意某些数据会强制类型转换,结果可能也需要强制类型转换
4. 浮点型在计算时要注意变量是否需要 (*1.0),使结果呈现出小数

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值