JAVA基础知识(二)数据类型及运算符

JAVA基础知识(二)JAVA程序基础(数据类型及运算符)

注释

单行注释

//	这是单行注释
System.out.println("hello, world")

多行注释

/*
 这是多行注释	
*/
System.out.println("hello, world")

文档注释

/**
 * 这是文档注释,用以对函数、类等进行注释说明
 * @param args
 */
public static void main(String[] args) {
    System.out.println();
}

基本结构

一个JAVA的hello,world程序,HelloWorld.java

public class HelloWorld {
    // 主函数,写法固定。
    public static void main(String[] args) {
        System.out.println("Hello,World");
    }
}

Java作为面向对象的编程语言,一个基本的java程序就是从一个同文件名相同的类开始的,这个类是一个java程序所必须有的类。

类名具有一定的要求:

  • 类名必须以英文字母开头,后接字母,数字和下划线的组合
  • 以大写字母开头

java程序的运行入口是main函数,它有固定的格式写法,如上可见。

System.out.println("输出内容")是一个Java中输出到控制台的语句。

关键字

同其他编程语言一样,java也有其规定的关键字,这里列为表格,但是仅仅作为手册了解,不需要记忆,在后续学习过程中自然而然会知道哪些是关键字,并且也自然不会用以命名。

来源:Java关键字

关键字含义
abstractabstract关键字用于修饰类和方法:1)抽象类抽象类是一个受限制的类,不能用于创建对象(要访问它,它必须从另一个类继承)。2)抽象方法抽象方法只能在抽象类中使用,并且没有实现。 由子类实现抽象方法(从继承)。
assert断言,用来进行程序调试
boolean基本数据类型之一,声明布尔类型的关键字
break中断循环语句的执行
byte基本数据类型之一,字节类型
case用在switch语句之中,表示其中的一个分支
catch用在异常处理中,用来捕捉异常
char基本数据类型之一,字符类型
class声明一个类
const保留关键字,没有具体含义
continue跳出本次循环,断续执行下一次循环
default默认,例如,用在switch语句中,表明一个默认的分支。 Java8 中也作用于声明接口函数的默认实现
do用在do-while循环结构中
double基本数据类型之一,双精度浮点数类型
else用在条件语句中,表明当条件不成立时的分支
enum枚举
extends表明一个类型是另一个类型的子类型。对于类, 可以是另一个类或者抽象类; 对于接口,可以是另一个接口
final用来说明最终属性,表明一个类不能派生出子类, 或者成员方法不能被覆盖, 或者成员域的值不能被改变,用来定义常量
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float基本数据类型之一,单精度浮点数类型
for一种循环结构的引导词
goto保留关键字,没有具体含义
if条件语句的引导词
implements表明一个类实现了给定的接口
import表明要访问指定的类或包
instanceof用来测试一个对象是否是指定类型的实例对象
int基本数据类型之一,整数类型
interface接口
long基本数据类型之一,长整数类型
native用来声明一个方法是由与计算机相关的语言 (如C/C++/FORTRAN语言)实现的
new用来创建新实例对象
package
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
return从成员方法中返回数据
short基本数据类型之一,短整数类型
static表明具有静态属性
strictfp用来声明FP_strict(单精度或双精度浮点数) 表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范
super表明当前对象的父类型的引用或者父类型的构造方法
switch分支语句结构的引导词
synchronized表明一段代码需要同步执行
this指向当前实例对象的引用
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
transient声明不用序列化的成员域
try尝试一个可能抛出异常的程序块
void声明当前成员方法没有返回值
volatile表明两个或者多个变量必须同步地发生变化
while用在循环结构中

变量

变量就是初中数学的代数的概念,例如一个简单的方程,x,y都是变量:

y=x2+1

在Java中,变量需要先定义后使用。定义格式如下:

数据类型 变量名[ = 初始化值];

例如:

int a = 1;		// 定义一个整型变量a,并且令其当前值为1。
int b,c;		// 定义整型变量b和c
a = 2; 			// 变量a再次使用无需声明类型,表示将a的值改为1
b = 1;			// 虽然定义时没有给初始化值,但是后面要使用则必须先给定值,然后才可以使用。

在Java中,变量分为两种:基本类型的变量和引用类型的变量。

基本类型

整数类型

表示整数(默认为十进制),Java中均有符号。

类型描述取值范围
byte1字节,8bit-128 ~ 127
short2字节-32768 ~ 32767
int整型,4字节-2147483648 ~ 2147483647
long长整型,8字节-9223372036854775808 ~ 9223372036854775807
byte a = 1;
short b = 100;
int c = 100000;
long d = 100000000000000L; // 要加后缀L

也可以使用二进制、八进制、十六进制方式定义

进制前缀符号例子
二进制0b0Bint a = ob10; //等价于2
八进制0(PS:零)int a = 010; // 等价于8
十六进制0x0Xint a = 0x10; // 等价于16
浮点型

表示小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的,如1234.5可以表示成12.345x102,也可以表示成1.2345x103,所以称为浮点数。

Java中,浮点数无法精确表示(事实上,计算机中均如此),“因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是double,都只能存储一个0.1的近似值。但是,0.5这个浮点数又可以精确地表示。”

类型描述最大表示
float浮点型3.4x1038
double双浮点型1.79x10308

定义方式如下:

float x = 1.2f;// float型定义后需加上后缀f
float x1 = 3.14e38f; // 等价于 3.14 * 10^38
double y = 1.3;

浮点型判别相等请使用“相减后求绝对值忽略一定精度的方式”,不要用==判断

布尔类型

boolean, 表示真或假,值为true或者false,是关系运算的结果,可以狭义的理解为正确或错误。Java中不能认为1为真,0为假。

boolean flag1 = true;
boolean flag2 = false;
boolean result = 1 > 2 ;// 计算结果为false
字符类型

char,表示一个unicode字符,用单引号表示'',可以是一个数字、汉字、字母、符号。

char x = 'a';
char x1 = 97;			// 利用Java进行自动类型转换
char x2 = '\u0061'; 	// unicode方式,十六进制0061 = 十进制97
System.out.println(x); 	// 输出:a
System.out.println(x1); // 输出:a
System.out.println(x2); // 输出:a

想知道具体字符的unicode码(取值范围0~65535),可以通过以下方式获取:

int value = (int)'a';
System.out.println(value);
基本数据类型间的转换

PS:boolean不能和其他基本类型进行转换。

自动类型转换

将取值范围小的类型自动提升为取值范围大的类型,隐式且自动转换。

在这里插入图片描述

例如:byte->int

byte a = 123;
int b = 12345;
b = a; // 将a赋值给b,a将自动转换为int型
强制类型转换

将取值范围大的类型转换为取值范围小的类型,显示且手动转换。

转换格式:

<取值范围小的数据类型> <变量名> = (<取值范围小的数据类型>)<取值范围大的变量>

强制类型转换可能会丢失一些精度或溢出。

例如: double -> int

double x = 3.14;
int a = (int)x;
System.out.println(a); // 输出:3

Java运算中,byte,short,char都会先被提示成为int型然后再计算。

byte a = 1;
byte b = 2;
byte c = a + b; // 报错:Required type:byte,Provided:int

引用类型

字符串

String, 常用的引用类型。

String str = "hello, world";
System.out.println(str); // 输出:hello,world

特殊字符需要转义,使用\来进行转义

  • \" 表示字符"
  • \' 表示字符'
  • \\ 表示字符\
  • \n 表示换行符
  • \r 表示回车符
  • \t 表示Tab
  • \u#### 表示一个Unicode编码的字符

Java中String是不可变类型,对其的操作(运算)都是相当于返回了一个新的字符串。

字符串的判别相等要使用str.equals()方式判别。

数组

数组是一组类型相同的变量的集合,是一种引用类型。

定义方式

<数据类型>[] <数组名> = new <数据类型>[<数组大小>]

也可以以直接初始化方式定义,这样默认数组大小就是n

<数据类型>[] <数组名> = {<数据1>, <数据2>,……,<数据n>}

例如:

int[] list = new int[5];

通过下标访问每个变量list[0]list[1]……list[4]。同C/C++语言一样,需要预留最后一个位置不能使用。

数组大小:list.length
将数组内元素排序的方法:Arrays.sort(<待排序数组>)

将数组内元素转换成字符串:Arrays.toString(<待排序数组>)

二维数组

既数组的数组。也可以简单的理解成一种二维“表格”。

基本定义如下:

  1. 静态初始化(举例):

    int[][] table = {
                    {1, 2},
                    {4, 5, 6},
                    {7, 8, 9}
            };// 每一行允许长度不一致。
    
  2. 动态初始化(举例)

    // 先new出“表格”的行
    int[][] table2 = new int[3][];
    // 再分别new出“表格”的列
    for (int j = 0; j < table2.length; j++) {
        // new “列”,并赋值
        table2[j] = new int[3];
    }
    

    综合举例:

    package run.heat.java;
    
    import java.util.Arrays;
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("-------------静态初始化-------------");
            int[][] table = {
                    {1, 2},
                    {4, 5, 6},
                    {7, 8, 9}
            };
            for (int[] cow: table) {
                System.out.println(Arrays.toString(cow));
            }
            System.out.println("-------------动态初始化-------------");
            // 先new出“表格”的行
            int[][] table2 = new int[3][];
            // 再分别new出“表格”的列
            int t = 1;
            for (int j = 0; j < table2.length; j++) {
                // new “列”,并赋值
                table2[j] = new int[j + 1];
                for (int i = 0; i < table2[j].length; i++) {
                    table2[j][i] = t++;
                }
            }
            for (int i = 0; i < table2.length; i++) {
                System.out.println(Arrays.toString(table2[i]));
            }
    
        }
    }
    
    
其他
其他

均可以看作java提供的对象,后面具体介绍, 使用前需要new(既需要手动创建)。

空值

引用类型的变量可以指向一个空值,再Java中用关键字null表示。

String s = null;

常量

与变量相对,在程序运行过程中自定义起既不变的量。定义变量前加上final关键词,则定义了一个常量,常量名称通常全部大写。

final double PI = 3.1415826;

作用域

通常,从定义开始,到语句块结束(既最近一层{}结束处)。

{
    ...
    int i = 0; // 变量i从这里开始定义
    ...
    {
        ...
        int x = 1; // 变量x从这里开始定义
        ...
        {
            ...
            String s = "hello"; // 变量s从这里开始定义
            ...
        } // 变量s作用域到此结束
        ...
        // 注意,这是一个新的变量s,它和上面的变量同名,
        // 但是因为作用域不同,它们是两个不同的变量:
        String s = "hi";
        ...
    } // 变量x和s作用域到此结束
    ...
} // 变量i作用域到此结束
// 来源: https://www.liaoxuefeng.com/wiki/1252599548343744/1255883729079552

标识符

给类、变量、接口、方法、包等起的名字均称为标识符。

规定:

  • 组成:大、小写字母、数字、$_、中文字符(不推荐使用)
  • 数字不能最为开头
  • 标识符不能是关键字

规范:

  • 方法(函数)名、变量名:驼峰取名法
  • 常量名:字母均大写
  • 类名:所有单词首字母大写

运算

四则运算

遵循四则运算规则,与数学规则一致。****

public class Main {
    public static void main(String[] args) {
        int i = (100 + 200) * (99 - 88); // 3300
        int n = 7 * (5 + (i - 9)); // 23072
        int k = (3 * 4) / 2; // 6
        System.out.println(i);
        System.out.println(n);
        System.out.println(k);
    }
}
// 来源:https://www.liaoxuefeng.com/wiki/1252599548343744/1255888634635520

特别的:

  • 被除数为0时,运行时会报错,编译不报错。
  • 除数和被除数都为整数时,其运算结果也为整数(可能失去精度)
简写

当变量自身作为参与运算的元素时,可以简写。

int a, b;
a += b; // 等价于: a = a + b
a -= b; // 等价于: a = a - b
a /= b; // 等价于: a = a / b
a *+ b; // 等价于: a = a * b

求余运算

对整数,用运算符%

例如,求3/2的余数

int rs = 3 % 2;

自增自减运算

自增:

  • <变量>++:先使用后对变量+1
  • ++<变量>:先对变量+1,后使用

自减:

  • <变量>--:先使用后对变量-1
  • --<变量>:先对变量-1,后使用

位运算

对整数,计算机以二进制形式存储,所以可以进行位运算。

右移运算(>>):将整数的二进制形式右移一位,等价于除以2。

左移运算(<<):将整数的二进制形式左移一位,等价于乘以2。

与运算(&):将两个整数按位进行与运算。

或运算(|):将两个整数按位进行或运算。

非运算(~):将一个数按位进行非运算。

异或运算(^):两个整数按位进行异或运算。

有关位运算的具体理论及使用,参考:位运算

与位运算有关的计算机基础知识补充:计算机组成原理-原码, 反码和补码,了解一下计算机底层逻辑,了解下原码、反码、补码,对于位运算会有一定更加深刻的感觉。

运算符的优先级

在Java的计算表达式中,运算优先级从高到低依次是:

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

记不住也没关系,只需要加括号就可以保证运算的优先级正确。

来源:Java程序基础-整数运算

布尔运算

布尔运算既关系运算,结果总为truefalse

  • 比较运算符:>>=<<===!=
  • 与运算 &&:左式为false时,右式不再运算
  • 或运算 ||:左式为true时,右式不再运算。
  • 非运算 !

关系运算符的优先级从高到低依次是:

  • !
  • >>=<<=
  • ==!=
  • &&
  • ||

三元运算

<运算结果> = <布尔表达式> ? x : y

表示,根据布尔表达式的结果

  • 若结果为ture:运算结果为x
  • 若结果为false:运算结果为y
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值