#java课程#初见java--注释,关键字,标识符
C或者 c++ 里面都有注释,有单行注释,也有多行注释.一般大学里的顺序都是先学习C,然后再来java,你们应该也了解一些C里面的注释吧,一般来讲有两种:
一是单行注释:直接在该行需要注释的地方加上"//"就行了。
例如:
"int a,b;//这是一个注释行"。那么,"//"后面的部分"这是一个注释行"就被注释掉了,不起作用,但是"//"前面的“int a,b;"不受影响。
二多行同时注释:
/*
int a,b;
int c,d;
*/
其中"/*"和"*/"起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。当然,多行注释也是可以用来单行注释的
// 表示单行注释,就是在一行的后面,只对本句话进行说明, /*
那么java和C一样,也有注释。
代码注释在程序中非常重要,他能架起 程序设计者与程序阅读者之间 的桥梁 ,还能提高团队合作的效率 。也是程序代码可维护性的重要环节之一。
Java 中的注释:
l 单行注释://用于每个单独行的注释
l 多行注释:/*用于单行或者多行的注释 */
l 文档注释:/**用于生成文档,专门来注释自己的类或者方法*/
//是单行注释,放在一句话的最后面,作为标注这句话,还可以用于一句话不想体现出来,还不想删除这句话,想之后看到,就把注释标注在最前面。
比如:
int a=10;//a=10
或者
//int a=10;
这样这句话就编译不出来了,你还能看到a=10;
*/这个是多行注释,可以在里面随意进行注释,一般都在类或者方法的前面,比如在类的前面,说明这个类的功能,编写日期,时间等,在方法前面的话就是方法的功能,形参是做什么的等。放在语句的后面的话呢,就是该条语句的功能
比如:public static void main (String 【】 args){
System.out.println( “ hello 牛客网 ” );//打印你好牛客网
System.out.println( “ hello world ” );//打印你好世界
}
养成一个爱注释的好习惯是非常重要的,以后去了公司里面,更是要注释,你想想,很多时候自己做完的事情可能都会忘,更何况在公司的话打出成千上万条语句,你再回过头找什么或者什么方法不会写的时候,你就知道头疼了,而且如果你写完代码了,离职了,别人再接手你的代码,你根本不知道他写了什么,每个人的思维模式都不一样,有了代码,至少就能看懂了她的意思。
这个是单行或者多行的注释,Java还有一种注释----文档注释,是java特有的,用这个来生程语法,是html的,现在我们就来说下文档注释。
/** */
这就是文档注释,写在两个地方,一个是类的前面,一个是方法的前面
/**
文档中注释在类的前面
作者:牛妹
日期:2016年
功能:你好牛客网
*/
public class HelloWorld{
/**
文档注释中方法的签名
当前是主方法
有字符串数组
*/
public static void main (String 【】 args){
System.out.println( “ hello 牛客网 ” );//打印你好牛客网
System.out.println( “ hello world ” );//打印你好世界
}
}
记住那个注释是两个*,后面是一个,这里注意一下。
写完之后,我们来看一下怎么生成文档。来看语法,
之前我们编译用的javac指令,运行用的Java指令,现在使用javadoc工具来提取程序的文档。
Javadoc 命令
用法:
javadoc [options] [packagenames] [sourcefiles]
选项:
-public 仅显示 public 类和成员
-protected 显示 protected/public 类和成员 ( 缺省 )
-package 显示 package/protected/public 类和成员
-private 显示所有类和成员
-d <directory> 输出文件的目标目录
-version 包含 @version 段
-author 包含 @author 段
-splitindex 将索引分为每个字母对应一个文件
-windowtitle <text> 文档的浏览器窗口标题-doctitle<html-code>: 制定一个 HTML 格式的文本,用于制定概述页面的标题
-header<html-code>: 制定一个 HTML 格式的文本,包含每个页面的页眉
-footer<html-code>: 制定一个 HTML 格式的文本,包含每个页面的页脚
最后的命令如下: Javadoc-d apidoc -windowtitle 测试 -header 自定义类 -footer 页脚 TestJavadoc.java
现在就开始对我们之前写过的helloworld这个类进行生成文档。
在dos里面输入命令
javadoc-d apidoc -windowtitle helloworld文档 -header 自定义类 -footer 页脚 TestJavadoc.java
输入之后回车
看到如下效果,再之后我们就能在我们所打程序的那个目录中发现多了一个目录,这个就是我们的文档
点进去有个index.html这个就是我们所生成的文档,打开你会看到很好的效果,标题之类的都有,作者,日期等等,也就是我们刚刚编辑的,这上面都会显示,很重要,以后工作的时候很重要,面试的时候可能涉及的不多。
打开这个index.html就是我们所标注的文档注释啦
所以我们不是为写注释而写注释。要有规范,那么具体规范是什么样的呢?
原则 :
1、 注释形式统一
在整个应用程 序中,一定要使用有一致的标点和结构的样式来构造注释。如果在其它项目中 发现 它 们的注释规范与这份文档不同,按照 这份 规范写代码,不要试图在既成的规范系统中引入新的规范。这样能为你的工作和团队带来效益。
2、 注释内容 准确简洁
内容要简单、明了、含义准确,不要写一些废话或者冗余或者难于理解的话,你的团队别人也看不明白,还耽误别人时间。同样的,你也不想接手这样的代码,己所不欲勿施于人吧。
注释 条件 :
1、 基本注释(必须加)
(a) 类(接口)的注释
(b) 构造函数的注释
(c) 方法的注释
(d) 全局变量的注释
(e) 字段/属性的注释
备注:简单的代码做简单注释,注释内容不大于10个字即可,另外,持久化对象或VO对象的getter、setter方法不需加注释。具体的注释格式请参考下面举例。
2、 特殊必加注释(必须加)
(a) 典型算法必须有注释。
(b) 在代码不明晰处必须有注释。
(c) 在代码修改处加上修改标识的注释。
(d) 在循环和逻辑分支组成的代码中 加注释。
(e) 为他人提供的接口必须加详细注释。
注意:此类注释格式暂无举例。具体的注释格式自行定义,要求注释内容准确简洁。
这部分之后会有介绍,下面看注释格式
注释格式 :
1、 单行(single-line)注释:“//…… ”
2、 块(block)注释:“/*……*/”
3、 文档注释:“/**……*/”
4、 javadoc 注释标签语法
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
java分隔符
这里来说说Java分隔符。
很多人说写程序就像是完成一篇文章。那么一篇好的文章自然少不了标点符号了。Java分隔符就是Java代码里面的分隔符。
Java中,具有代码分割作用的符号就是分隔符。圆点“.”、分号“;”、花括号“{}”和空格具有特殊的分隔作用,我们将其统称为分隔符。
-
;一条语句是以分号结尾的
-
{} 一个语句块是以花括号开始和结束的
-
[] 数组等的边界
-
()应用特别广泛,形参,实参等
-
空格可以放在语句中每个词之间的任何一处
-
圆点 用于类/对象和它的属性或者方法之间的分隔
1.分号
在Java中语句的分隔不是依靠回车来完成的,一条Java语句必须以分号(;)作为结束标记。因此,一行中可以写多条语句(语句之间用分号隔开即可)、一条语句也可以跨多行,只要在最后结束的地方加上分号表示此语句的结束。这个和很多的编程语言是一致的,比如C、C++、Javascript等。
2.块({})
所谓“块”,就是用“{”和“}”所包含的一段代码,它们在逻辑上常常是一个整体。
在Java程序中,类的代码必须放在一个“块”中,方法的代码也必须放在一个“块”中,而在条件语句、循环语句中的代码,也常常放在一个“块”中。{}就好像是一条边境线,将代码划分到相应的范围内。在Java代码中,{}数量必须匹配。不然就会出现没有结束范围的代码了。
3.空格(空白符)
就如同在英语中,使用空格来分隔单词一样,在程序语言中,也使用空格来分隔一条语句的不同部分,比如,在变量类型和变量名称之间,就必须使用空格来分隔开来。
在这边的空格包含如下一些主要的类型:空格符(space)、制表符(Tab)、回车(Return)等。
基本上来说,空格可以放在Java程序的任何地方,除了用于分隔一条语句外,空格还广泛地用于源代码的缩排,使得代码具有更高的可读性。
在写程序的时候,一定要灵活的使用空格来分隔语句或者做格式上的缩排等。但是,也要小心不要滥用它,比如,Java中规定,变量名、方法名等标识符不能包含空格,所以,不要定义包含有空格的标识符。
换句话说,空格符要用好,但不要滥用。除了必要的空格分隔(不然就无法区分不同的变量、名词了),空格更重要的作用是用来对源代码进行排版。源代码是给人来阅读的,良好地格式是顺畅阅读的前提。Java自有一套默认的代码编码排版规范。大部分的IDE都支持代码格式模版和自动格式化。所以对代码排版不用太担心。
4.圆点
圆点“.”用于类/对象和它的属性或者方法之间的分隔。在调用一个类/对象的属性或者方法的时候,必须使用如下的方式来完成。
在这里,圆点“.”就起到了分隔类/对象和它的方法或者属性的作用。这种用法在面向对象语言中很常见了。比如C++中、Ruby中等,有的语言是用其他符号来实现,比如php。
java标识符
下面我们来看一下java的标识符:
什么是标识符呢? Java语言中,对于变量, 常量 ,函数,语句块 这些,我们都把他们叫标识符。也就是给变量,常量,方法等命名的一种符号。所以呢,我们之前写的那些都是标识符,类名啊,常量啊,方法啊,都是。我们来深入看一下java的标识符
什么事情都有规范,java的标识符也是。
java的标识符的命名规范
1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。而且一定不能包括空格。后面我们举例子。
2. 标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。
3. Java是大小写敏感的,标识符也不例外
4. 标识符的命名最好能反映出其作用,做到见名知意。
所以在程序中args是正确的,换做了1args可以么,不可以!因为不能以数字开始哦。 “$”可以,但是人民币符号不行(还没达到那种境地那)。还有就是大小写敏感,ARGS和args是不一样的
比如我们来看代码片段
I nt old=10;
I nt OLD=12;
这两个是不一样的。再回过头来说,不能包括空格,这个也是初学者容易犯的错误,比如我们的类名是HelloWorld,但是很多初学者就容易携程Hello World,给分开了,这可不行!
现在来看一下标识符中常常遇到的错误,比如Niukewang就可以,但是Niu kewang就不可以。B1可以,但是1B就不行。_boolean可以,但是boolean就不行,为什么呢,因为boolean是关键字,关键字之后会说,$A可以,但是A@Ca##就不行,因为里面含有特殊字符。常量可以,但是this不可以,因为this也是关键字。
这里注意的是汉字是可以的哦,比如我们写一个
P ublic class 你好牛客网{
P ublic static void main(String [] args){
I nt 年龄=10;
System.out.println(年龄);
}
}
有人可能会说,那我全用中文编写可以么,是,你可以,但是那样很low的!真的有这样一种语言的,不知道了解过没有,叫易语言,如果。。那么。。
Java的关键字
每个世界中都有关键字---keywords,就像我们现在起名字,也有关键字,某些名字是不能起的,比如某某平,你们懂得吧。哈哈。Java 语言中有一些具有特殊用途的词被称为关键字。关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重!!
像static是关键字,你就不能把变量名起成static,
int static=6;//这句话就是错误的,如果你编译的话就会出错。
那么这句呢
public Static =6;//这句话就可以,为什么呢?因为java是分大小写的啊,Static的S大写了就跟static不一样了。
java中的关键字有哪些呢?一共48个
其中goto和const不是关键字,是保留字,可能在未来会成为关键字,但是这个至少现在是保留字。
来看一下这些具体的关键字及其含义,实际上java基础就是围绕这些来讲的。
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
Java关键字的大致含义
关键字 | 含义 |
abstract | 表明类或者成员方法具有抽象属性 |
assert | 用来进行程序调试 |
boolean | 基本数据类型之一,布尔类型 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case |
用在
switch
语句之中,表是其中的一个分支
|
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在 switch 语句中,表明一个默认的分支 |
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 算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
那这么多要现在都记住么,不需要的哦,你就混个眼熟和大概就行,因为我们后面会围绕展开来讲。
java的数据类型
其实呢 java 有四种类别的类型,共有八种类型,除了 这四类八种基础类型,剩下的java 一切类型 都是引用类型。那么 这四类八种基础数据类型是什么呢? 请看下面
第一类:整型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
引用数据其实就是相当于C语言中的指针,一样的都是难点和重点。
这四类八种基础数据类型 都在栈中直接分配内存空间,这些都是基础数据流类型,剩下的一切引用类型都存储在堆中,引用存储在栈中,数据存储在堆中 引用指向堆中的数据,比如呢,把客厅比喻java的栈内存块,把卧室比如堆内存块,然后呢 电视机的遥控器也就是也就是电视机的引用放在客厅里,然后 遥控器指向客厅(堆)里的电视机(对象或叫数据),然后 我们就可以从客厅里操作卧室里的电视机啦.
java中默认的整数类型是int类型,如果要定义为float型,则要在数值后加上l或L;
默认的浮点型也是双精度浮点,如果要定义为float型,则要在数值后加上f或F。
在 Java 的领域里,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。说白了,基本数据类型变量里存储的是直接放在抽屉里的东西,而引用数据类型变量里存储的是这个抽屉的钥匙,钥匙和抽屉一一对应。
在计算机的世界里面就是0和1的世界嘛,来看这个数据类型的大小,在面试中经常会被带到问的,因为不属于一个大问题却是非常基础的东西。
比如char类型是16位,数字范围就是2的16次幂是65536,但是国外都是从0开始计算的,所以就是一共65535个,所以char的寻址范围就是0-65535。
java中的整数常量
-
整数常量int ,有十进制,十六进制,八进制,二进制
-
长整型常量long 13l或者后面加L13L
-
单精度浮点数float,后面加f5.1f
-
双精度浮点数double 5.1
-
布尔常量boolean true/false
public class Niukewang{
public static void main(String [] args){
int i=14;//这个是十进制的数字,0---9
int j=0x;//这个是十六进制的数字,0---F,我们见过非常常见的表示法,比如颜色#FFFFFF代表白色
int k=077;//这个是8进制,0---7
System.out.println(k);//这个是多少呢?应该是8的0次幂*7+7*8的1次幂+0*8的3次幂=63
int z=010;//这个就是二进制的数字啦!
System.out.println(z);//如果输出的话应该是多少呢?可以自己试一下哦(告诉你是8)
}
字符型
通常用于表示单个的字符,字符常量必须使用单引号括起来。java使用16位的Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符,包括中文字符还有一些特殊的字符,所以呢,java程序也就支持各种语言的字符。
字符型常量有三种表示形式
-
直接通过单个字符来指定字符型常量,例如‘A’,'9','0'等。
-
通过转义字符表示特殊字符型常量,如'\n','\t'等。
-
直接使用Unicode值来表示字符型常量,格式是'\uxxx',其中xxxx代表一个十六进制的整数
java语言中常用的转义字符如图:
boolean类型
boolean类型的值或者变量主要是做flag的,多用于循环语句中。java语言中使用boolean类型的变量或值控制的流程主要有以下几种:
-
if条件控制语句
-
while循环控制语句
-
do循环控制语句
-
for循环控制语句
还有一个重要的应用就是在三目运算符里,之后我们也会说这个三目运算符
java是个强类型语言,什么是强类型语言呢?因为前面一定要有类型比如要写
int i=10;不能写i=10;强类型好还是弱类型好呢?对于我们学的人来说,强类型的比较好,我们编程起来简单,因为弱类型语言写到后面你就都忘记是什么类型的了,因为他们的类型是由后面的值决定的。所以从某种角度来看,编程容易一些。
但是现在的趋势都是弱类型语言了,比如js,php(php是最好的语言,这个梗啊,哈哈经久不衰啊)
Java中变量的使用规则
1、Java 中的变量需要先声明后使用
2、变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值
3、变量中每次只能赋一个值,但可以修改多次
4、main 方法中定义的变量必须先赋值,然后才能输出
java的数据类型
数据类型的转换
各数据类型按容量大小(表数范围大小)由小到大排列为:
Byte, short, char ——int ——long——float——double
1.转换时遵循的原则:
1)容量小的类型自动转换为容量的类型;
2)容量大的类型转换为容量小的类型时,要加强制转换符;
3)byte,short,char之间不会互相转换,并且三者在计算时首先转换为int类型;
4)实数常量默认为double类型, 整数常量默认为int类型;
有人可能会疑问, 字符型 为什么也能和 整形、浮点型进行运算呢? 因为字符型在机器内部也是数字。进行计算时,先获得字符的ASCK码,然后再进行计算。
2.转换举例:
Int i1=123;
Int i2=456;
Double d1 = (i1+i2)*1.2 //容量小的类型自动转换为容量大的类型
Float f1 = (float) (i1+i2)*1.2 //容量大的类型转换为小容量的类型时,需要加上强制转换符
Byte b1=1;
Byte b2=2;
Byte b3=(byte)(b1+b2); //byte,short,char在计算时首先转换为int,大容量(int)转换为小容量的类型(byte)时要加强制转换符
long l1=100l;//int到long的自动转换
float f1=2.1f;//缸里的水倒入盆里的感觉
现在要看两句话的输出
float f=.400f
double d=34;
System.out.println(f);//输出是0.4
System.out.println(d);//输出应该是34.0
float ff=2e3f//这个是科学技术法的表示形式,输出的话是2000.0
float ff1=-2e3f;//输出应该是-2000.0
float ff2=2e-3f;//输出应该是0.002
float ff3=2.0e-3f//输出应该是0.002
要注意的就是科学计数法只能表示在浮点类型中。
再来看几个例子
System.out.println(4/0.0);//infinity
System.out.println(4.0/0);//infinity
System.out.println(-4/0.0);//-infinity
System.out.println(4/0);错误的哦,为什么上面的都对的,就是java的自动转换,int自动转换成浮点类型的了。
下面我们就来具体说一下数据类型的转换
在java程序中,不同的基本类型的值经常需要相互转换。有两种转换方式:自动类型转换和强制类型转换。
自动类型转换
如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换。就相当于盆里的水倒入缸里是没有问题的,但是缸里的水倒入盆里,就会溢出,水就不那么精确的一样了,因为要洒出好多。
当然自动类型转换是需要满足特定的条件的 :
1. 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
2. 目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了
.int型值可以赋给所有数值类型的变量;
long型值可以赋给long、float、double类型的变量;
float型值可以赋给float、double类型的变量;
double型值只能赋给double类型变量。
把一个能表示更大范围或者更高精度的类型,转换为一个范围更小或者精度更低的类型时,
就需要使用强制类型转换。
例如:把一个double型值赋值给一个long类型变量,编译时会报错,即使这个值没有超出long类型的取值范围
long l = 1.0D;
除非使用强制类型转换
long l=(long) 1.0D;
注意:未带有字符后缀标识的整数默认为int类型;未带有字符后缀标识的浮点数默认为double类型。
String 是引用类型 不属于四类八种基础数据类型中的一个,切记切记 往往面试的时候 面试官会问道这个问题而且频率很高。
Java中的强制类型转换
尽管自动类型转换是很方便的,但并不能满足所有的编程需要。
例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢?
显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小。此时就需要通过强制类型转换来实现了。
语法:( 数据类型 ) 数值
注:强制的转换会导致数据损失精度,所以在运用的时候要注意~
上面我们说到了字符型,来看他转换成unicode码
int a='A';
int b='a';
自动转换成了int型,所以是
这样的话我们就能算出自己的名字的unicode码来了,可以试试,比如
int a='牛';
int b=‘客’;
int c=‘网’;
所对应的数字就是对应的码,我们反过来就可以打印出牛客网