目录
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运算符的内容。

9328

被折叠的 条评论
为什么被折叠?



