本篇博客将对Java中的数据类型、操作符,常量与变量和数组进行介绍。这些内容都是Java中最基本的知识,也是初学Java时最开始就需要了解的东西。

Java数据类型

Java是一种强类型的语言,这就意味着编写Java代码时必须为每一个变量都声明一个类型,且每个变量只能被赋予与其类型匹配的值。Java中的数据类型可以分为基础数据类型和引用数据类型,两者间最大的差别是在计算机中的存储方式和位置不同。基础数据类型在创建时会在栈中分配一块内存,将数据直接存储在其中;而引用数据类型在被创建时,会在堆内存上分配一块内存,将数据内容存储在其中,并在栈中分配一块内存用于存储该数据在堆中的地址。

Java中包含8中基本数据类型,包括4中整数类型:short、int、long、byte,2中浮点类型:float、double,1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真假值的boolean类型。它们相关信息如图1所示

图1:各基本数据类型信息

在Java的8中基本数据类型中,出除了boolean不能与其他类型相互转换外,其他类型间可以相互转换。这几种数值类型之间的转换关系满足如图2的条件。其中当数据沿着箭头的方向进行转换时,不需要额外进行处理(如int转换为long),而逆着箭头进行转换时则需要进行强制类型转换,且有可能会损失数据精度(如将float转换为int)。这里需要注意的是,这里大部分箭头都是从存储长度短的数据类型指向存储长度长的数据类型,这很容易理解。但是long的长度是64位,float的长度是32位,但是箭头确实从long指向float。这是因为float虽然占用字节数比较少,但是由于其采用的是尾数+指数的方式来表示的,因此反而比long数据类型的范围更大(查看图1也可以发现),因此数据从long转向float不会损失精度。

图2:各数据类型间的转换

基本数据类型的声明不需要多说,在初始化数据时,整型数据默认为int类型,浮点型数据默认为double类型。如果要定义long类型数据需要在数据后加L,否则会编译错误;同理定义float数据时需要加F。如图3所示:

图3:long和float数据类型的定义与赋值

运算符

Java中的运算符包括算术运算符,位运算符,赋值运算符,比较运算符,逻辑运算符和三目运算符。

算数运算符包括+、-、*、/、%、++(自加)、--(自减)。其中,++和--操作属于一目运算符,它们只能对一个操作书进行运算,且可以放在操作数的前面和后面。两者差别在于当自加(自减)放在操作数前面的时候,先对操作数进行加一(减一)操作,然后进行表达式的运算;放在操作数后面时,先进行表达式运算,然后对操作数进行加一(减一)操作。

位运算符对整型数的二进制的每一位进行操作,包括以下七种:

& 按位与,左右都为1时返回1,其余为0
| 按位或,左右都为0时返回0,其余为1
~ 非,0结果为1,1的结果为0
^ 异或,左右相同时为0,不同时为1
<< 左移运算
>> 右移运算
>>> 无符号右移运算

赋值运算符的作用是给变量赋值,Java中使用=进行赋值操作。其次,赋值操作符还可以和算出操作符和位运算符一起使用。例如 “+=”操作, x += 3 等同于 x = x + 3。扩展运算符和原表达式的结果是一样的,但是能够避免运算时类型转换的错误,如图4所示:

图4:图片来自《疯狂Java讲义》

比较运算符只返回true和false,表示比较式成立和不成立,包括==、>、>=、<、<=五种。

逻辑运算符对布尔类型的变量进行运算,返回结果也为布尔类型。包括以下几种:

&& 短路与,左右均为true时结果为true,否则为false。当左侧为false时,不判断右侧结果
& 不短路与,作用于&&相同,但不进行短路
|| 短路或,左右均为false时为false,否则为true。当左侧为true时,不判断右侧结果
| 不短路或,作用于||相同,但不进行短路
非,操作数为true返回false,操作数为false返回true
^ 异或,两侧操作数相同为false,不同为true

三目运算符是“?:”,先计算一个逻辑表达式的值,根据值得不同返回不同的值。c = a > b ? 0 : 1表示,当a > b是c为0,否则为0。

变量与常量

变量指程序运行中可以改变的值,常量值程序运行中不能改变的值。Java中定义常量使用final进行修饰,final除了可以修饰常量以外,还可以用于修饰方法和类。

使用final修饰一个引用变量时,改变量所指向的对象不可以被改变,但是变量内部的其他变量可以修改;

使用final修饰一个方法时,该方法不可以被覆盖;

使用final修饰一个类时,该类不可以被继承。

数组

Java数组的定义方式如下:

        type[] arrName = new type[size];

        type arrName[] = new type[size];

两种定义方式没有差别,type表示数组中元素的类型,可以是基本类型或引用类型,arrName是数组的名字,new type[size]为数组分配了长度为size的空间长度,元素的默认值与定义的type的默认值相同。

Java数组的初始化有两种方式:

public void arrayTest() {
//静态初始化,定义数组时就分配空间并赋值
int[] arr1 = {1,2,3}; //动态初始化
int[] arr2 = new int[3];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
}

二维数组的定义与一维数组类似,且并不要求每一维的大小相同

    public void arrayTest() {
int[][] arr1 = {{1,2},{3,4},{5,6,7}}; int[][] arr2 = new int[3][3];
arr2[0][0] = 1;
arr2[1][2] = 2;
arr2[2][2] = 3; }

Java中有Arrays类,其中加入了一些对数组常用的操作,例如Arrays.sort(), Arrays.toString()等

Arrays.sort(arr1);//数组排序
System.out.println(Arrays.toString(arr1));//一维数组输出
System.out.println(Arrays.deepToString(arr2));//多维数组输出

参考文献

[1].疯狂Java讲义(第三版)

[2].Java编程思想 第四版

Java课堂笔记(一):Java基础的更多相关文章

  1. Java课堂笔记(零):内容索引

    回想自己学习和使用Java的时间也是很长了.本科期间课堂上浅尝辄止地学习了点皮毛,后来也是搁置不用,未曾深入研究.研究生期间因为项目和实习的原因,基本算是重新拾起Java这门语言,并且接触到了Spri ...

  2. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  3. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  4. 【转载】Java系列笔记(1) - Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...

  5. Java系列笔记(2) - Java RTTI和反射机制

    目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...

  6. 【转载】Java系列笔记(3) - Java 内存区域和GC机制

    Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...

  7. 线程(java课堂笔记)

    1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同 ...

  8. 艾编程coding老师课堂笔记:java设计模式与并发编程笔记

    设计模式概念 1.1 什么是设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性. ...

  9. 【java学习笔记】反射基础

    一.反射 反射就是在剖析一个类,了解这个类的构造,创建这个类对应的对象. Class 代表字节码的类,代表类的类 Field 代表属性的类 Method 代表方法的类 Constructor 代表构造 ...

  10. Java精选笔记_Java编程基础

    Java的基本语法 Java代码的基本格式 修饰符 class 类名 {   程序代码 } 一个Java源文件只定义一个类,不同的类使用不同的源文件定义:将每个源文件中单独定义的类都定义成public ...

随机推荐

  1. 51nod 2512

    看错题目!!啊啊啊,都说了不能有前导,我怎么这么想当然呢!!另外1也是2的幂次方 代码: #include<iostream> #include<cstdio> #includ ...

  2. 正则表达式匹配日期,支持闰年,格式为YYYYMMDD

    年份:[\d]{4} 带31的月份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])) 非2月不带31日的月份:((0[469])|11)((0[1-9])| ...

  3. web文件下载

    web页面实现文件下载的几种方法 今天碰到文件下载的一些问题,本着知其然也要知其所以然的精神,站在巨人的肩膀上深入学习和测试了一下,抛砖引玉,现在总结结论如下: 1)标准URL下载方式可以通过在web ...

  4. systemctl: command not found

    可以使用service代替 service语法有一点区别 这里演示了错误语法和正确语法

  5. python3 集合(set)

    一.定义:集合是一个无序不重复元素序列 语法: #---------------两种写法-------------------------# parame = {value1,value2,value ...

  6. Java常见的10个异常

    1.NullPointerException: 空指针异常,当操作一个 null 对象的方法或属性时会抛出这个异常.是一个很头疼的异常,因为它是运行时异常,不需要手动捕获,但运行时碰到这个异常会中断程 ...

  7. loading js备份

    loadingManageEdit.jsp $(function(){ //组织 var lodingDeparts =[<c:forEach items="${lodingDepar ...

  8. swagger出现no response from server错误的解决办法

    解决办法:1.启用80端口2.如果不是使用的80端口,是用的nginx做了映射的其他端口的话可以用Springfox swagger-ui 覆盖默认request host,加上这个在spring的应 ...

  9. 【Linux】Ubuntu安装Mysql 8.0

    1.下载Mysql的安装配置,http://dev.mysql.com/downloads/repo/apt/ 2.执行配置配置文件 sudo dpkg -i mysql-apt-config_0.* ...

  10. sql 选取分组中的第一条,显示聚合以外的列,having字句的使用

    分组中的第一条:select * from(select row_number() over(partition by 列1,列2,... order by 列1,列2,...) as rownum ...