目录
1. Java小知识点
1.1 Java注释
1.2 Java标识符命名
1.3 Java关键字
2. 字面常量和数据变量
2.1 字面常量
2.2 数据类型
3.变量
3.1 变量概念
3.2 语法格式
3.3 整型变量
3.4 浮点型变量
3.5 字符型变量
3.6 布尔型变量
3.7 类型转换
3.8 类型提升
4. 字符串类型
本篇完。
1. Java小知识点
上一篇的Hello程序:
在一个好的程序中不但包含好的代码,还会包含很多注释。
1.1 Java注释
注释是为了让代码更容易被读懂而附加的描述信息, 不参与编译运行,但是却非常重要。时刻牢记代码写出来是为了给人看的, 更是为了给以后的看的。
Java中的注释主要分为三种:
- 单行注释:// 注释内容(用的最多)
- 多行注释:/* 注释内容*/ (不推荐,不常用)
- 文档注释:/** 文档内容 */(常见于方法和类之上描述 方法和类 的作用,可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档)
注意:
- 多行注释不能够嵌套使用
- 不论是单行还是多行注释,都不参与编译,即编译生成的 .class文件不包含注释信息。
代码示例:
/**
文档注释:
@version v1.0.0
@author rtx
作用HelloWorld类,入门第一个程序练习
*/
public class HelloWorld{
/*
多行注释:
1. main方法是Java程序的入口方法
2. main函数的格式是固定的,必须为public static void main(String[] args)
*/
/**
main方法是程序的入口函数
@param args 命令行参数。
*/
public static void main(String[] args){
// 单行注释:System.out.println是Java中标准输出,会将内容输出到控制台
System.out.println("Hello World");
}
}
------------------------------------------------------------------------------------
// 在cmd中,使用javadoc工具从Java源码中抽离出注释
// -d 创建目录 myHello为目录名
// -author 显示作者
// -version 显示版本号
// -encoding UTF-8 -charset UTF-8 字符集修改为UTF-8
javadoc -d myHello -author -version -encoding UTF-8 -charset UTF-8 HelloWorld.java
1.2 Java标识符命名
一些标识符命名规则和建议:
【硬性规则】
标识符中可以包含:字母、数字以及下划线和$符号等等。
标识符不能以数字开头,也不能是关键字,且严格区分大小写。
【软性建议】
类名:每个单词的首字母大写(大驼峰)。
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)。
变量名:与方法名规则相同。
1.3 Java关键字
通过观察上述程序可以发现,public、class以及static等会出现颜色变化,Java环境将这些具有特殊意义的标识符成为关键字。即:关键字是由JAVA语言提前定义好的,有特殊含义的标识符,或者保留字。
注:用户不能使用关键字定义标识符。
Java关键字分类:
48个关键字
abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
2个保留字
goto const
3个特殊直接量:
true、false、null
2. 字面常量和数据变量
2.1 字面常量
在HelloWorld程序中, System.Out.println("Hello World"); 语句,不论程序何时运行,输出的都是Hello World,其实"Hello World"就是字面常量。
常量即程序运行期间,不论何时运行都固定不变的量称为常量。
字面常量的分类:
- 字符串常量:双引号中的内容,如“hello world”、“哈哈”
- 整型常量:程序中直接写的数字(没有小数点)
- 浮点型常量:程序中直接写的小数。
- 字符常量:‘’中的单个字符,如‘A’、‘1’
- 布尔常量:只有true和false两种
- 空常量:null
public class Demo{
public static void main(String[] args){
System.Out.println("hello world!");
System.Out.println(100);
System.Out.println(3.14);
System.Out.println('A');
System.Out.println(true);
System.Out.println(false);
}
}
其中:100、3.14、‘A’、true/false、“hello world”都是常量,将其称为字面常量。
注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。
2.2 数据类型
在Java中,数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型有四类八种:
- 四类:整型、浮点型、字符型和布尔型
- 八种:如下图
3.变量
3.1 变量概念
在程序中,如果仅有这些字面常量显然是不够的,有些内容可能需要经常改变。对于这些经常改变的内容,在Java程序中,称为变量,而数据类型就是用来定义不同种类的变量的。
3.2 语法格式
语法格式也就是定义变量的格式,和C语言基本一致:
数据类型 变量名 = 初始值;
比如:
int a = 10; // 定义整型变量a,a是变量名,初始值为10
double d =3.14;
char c = 'A';
boolean b = true;
a = 100; // a是变量,a中的值在过程中是可以修改的
int a1 = 10,a2 = 100,a3 = 1000;
// 在一行可以定义多个相同类型的变量
注意:变量在使用之前必须要赋初始值,否则编译报错。(不会像C语言有随机值)
3.3 整型变量
整型变量中有int、short、long、byte变量类型。
整型变量,也就是int类型变量,有如下几种特点:
- int在任何系统下都是4个字节
- 给变量设置初始值时,不能超过表示范围,否则会导致溢出
- int的包装类型为 Integer
3.3.2 短整型变量
短整型变量,也就是short类型变量,有如下几种特点:
- short在任何系统下都占2个字节
- short的表示范围为:-32768~32767
- short的包装类型为Short
3.3.3 长整型变量
长整型变量,也就是long类型变量,有如下几种特点:
- 长整型变量的初始值后加L(L和l都可以,但是L便于区分)
- 长整型在任意系统下都是8个字节
- long的包装类型为Long
int a = 10;
long b = 10;
long c = 10L; // 为了区分int和long类型,一般建议long类型变量的初始值后加L
3.3.4 字节型变量
在Java中还有个字节型变量,byte类型,具有以下特点:
- byte在任何系统下都占1个字节
- byte的范围是 -128~127
- byte的包装类型是Byte
byte a = 10;
System.Out.println(a);
3.4 浮点型变量
在Java中,int除以int的值仍然是int(直接舍弃小数部分)。如果想得到小数,需要使用double类型计算,该类型具有以下特点:
- double在任何系统下都占8个字节
- double的包装类型为Double
- double类型的内存布局遵守IEEE 754标准(和C语言一致),尝试使用有限的内存空间标识可能无线的小数,因此浮点数是个近似值,并不是精确值。
double a = 1.0;
System.Out.println(a);
double b = 2.0;
System.out.println(a / b); // 输出0.5
double num = 1.1;
System.out.println(num * num); // 输出1.21吗?
// 执行结果
1.2100000000000002
3.4.2单精度浮点型变量
也就是float类型,具有以下几种特点:
- 在任意系统中占4个字节
- 与double相同遵守IEEE 754标准
- 由于float表示精度较小,一般优先考虑double
- float的包装类型为Float
- 在定义变量时后面加上‘f’或‘F’进行区分
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num)
3.5 字符型变量
字符型变量也就是char类型,Java中使用单引号+单个字母的形式表示字符字面值。
计算机中的字符本质上也是一个整数,在C语言中我们使用ASCII值表示字符,而Java中我们使用Unicode来表示字符,因此,一个字符占用两个字节,表示的字符也就更多。
char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2)
char的包装类型为Character。
3.6 布尔型变量
布尔类型常用来表示真假,和C语言中的bool类型很相似。
boolean a = true;
System.out.println(a);
boolean b = false;
System.out.println(b);
该变量有以下几种特点:
- boolean类型的变量只有两种取值,true表示真,false表示假
- Java的boolean类型和int不能相互转换,也就不存在“1表示true,0表示false”这种用法
boolean value = true; System.out.println(value + 1); // 代码编译会出现如下错误 Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误 System.out.println(value + 1); ^ 第一个类型: boolean 第二个类型: int 1 个错误
- Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现过程中,boolean占1个字节。
- boolean的包装类型为Boolean。
3.7 类型转换
Java作为一个强类型编程语言,当不同类型的变量相互赋值的时候,也会有较严格的校验。在Java中,当参与运算的数据类型不一致时,就会进行类型转换,Java中类型转换主要分为两类:自动类型转换和强制类型转换。
3.7.1自动类型转换
自动类型转换即代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
public static void main(String[] args) {
System.out.println(100); // 默认为int类型
System.out.println(3.14); // 默认为double类型
int a = 100;
long b = 10L;
b = a; // a和b都是整型变量,a的范围比b小,赋值时系统会自动将a提升为long类型,然后赋值
a = b; // 编译报错,long范围比int大,赋值时可能会丢失数据,不安全
3.7.2强制类型转换
强制类型转换即当进行操作时,代码需要经过一定格式的处理,不能自动完成。
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
注意:
- 不同数据类型的变量之间赋值,表示范围更小的类型会自动转换为范围较大的类型。
- 如果把范围大的类型赋值给范围小的,需要强制类型转换,但可能丢失精度。
- 将一个字面常量进行赋值的时候,Java会自动针对数字范围进行检查。
- 强制转换不一定成功,不相关的类型不能相互转换(如boolean类型不能强转为int类型)
3.8 类型提升
通过上面知识点我们知道不同类型的数据之间相互运算时,数据类型范围小的会被提升为数据类型范围更大的。
- int与long之间:int会被提升为long
int a = 10; long b = 20; int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据 long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long
- byte与byte的运算
这个很有意思,先看一段代码:byte a = 10; byte b = 20; byte c = a + b; System.out.println(c);
在IDEA中会发现编译报错:java: 不兼容的类型: 从int转换到byte可能会有损失
结论:上述变量都是相同类型,但是还是出现了编译报错,为什么呢?原因是,虽然a和b都是byte类型,但是计算a+b时会先将a和b都提升为int类型,再进行计算,得到结果的类型也是int,通过上面我们知道大放小可能会丢失数据,这里赋值给c,就出现了编译报错。
那为什么会先提升再计算呢?:
因为计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于4个字节的类型就会先被提升成int,再参与计算。
正确的写法:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
4. 字符串类型
在Java中使用String类定义字符串类型,比如:
public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1 + s2); // s1 + s2表示:将s1和s2进行拼接
}
在有些情况下,需要将字符串和整形数字之间进行转换:
1. int 转成 String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
2. String 转成 int
String str = "100";
int num = Integer.parseInt(str);
这里只是对字符串进行简单的介绍,能够正常使用即可,后序会详细介绍。
本篇完。
下一篇学习Java运算符的内容。