1.注释
注释可以增强代码的可读性,让自己或者他人快速的理解代码含义和设计思路,同时可以便于后期的对 系统中代码的维护和迭代升级等。
Java源码代码中的注释,不会出现在字节码文件中
单行 //
多行 /* */(不能嵌套)
文档
/**
*@author:作者
*@version:版本
*@deprecated:不推荐使用的方法、过时的方法。
*@param:方法的参数类型。
*@return:方法的返回类型。
*@see:用于指定参考的内容。
*@exception:抛出的异常。
*@throws:抛出的异常,和exception同义
*/
使用javadoc命令,根据Comment03中的文档注释和标记,生成API说明文档,并将生成的文档存放在API 目录中:
javadoc -d api src/Comment03.java
如果要显示作者和版本的话,需要加上-author和-version选项,前提是代码中使用@author @version 俩个标记
javadoc -d api -author -version src/Comment03.java
在Windows中,如果出现了中文乱码,可以加入-encoding UTF-8
javadoc -d api -author -version -encoding UTF-8 src/Comment03.java
Windows中,命令窗口默认使用编码是GBK(中文版Windows)
Linux中,命令窗口默认使用编码是UTF-8
在方法里面写文档注释编译与运行没有错,但是不会导出到文档。
只会在类外面和方法外面
/**
会导出
*/
class solution(){
/**
会导出
*/
public static void main (String args[]){
/**
不会导出
*/
}
}
分号(一段代码结束以后要加)
jar打包
jar命令(将class文件打包)
-
把当前目录中的Hello.class打到hello.jar这个jar包中
jar -cvf hello.jar Hello.class
-
把当前目录下的Hello.class 以及 World.class打到hello.jar这个jar包中
jar -cvf hello.jar Hello.class Word.class
-
把当前目录下的所有的class打到hello.jar这个jar包中
jar -cvf hello.jar *.class
-
把当前目录下的bin文件夹里面的所有文件打到这个jar包中,同时【包含】bin目录本身
jar -cvf hello.jar bin
-
把当前目录下的bin文件夹里面的所有文件打到这个jar包中,但是【不包含】bin目录本身
jar -cvf hello.jar -C bin .
-C bin表示切换到bin目录下执行这个命令,注意bin后的那个点 (.)
把当前目录下的bin文件夹里面的所有文件打到这个jar包中,
但是【不包含】bin目录本身
jar -cvf hello.jar -C bin .
这时候这个jar是一个普通的jar,不能直接java -jar的方式进行运行:
原因是因为没有在jar中指定哪一个类中有程序的入口,需要修改jar中的配置: Main-Class: com.briup.Hello
注意,冒号(:)后面有一个空格,这个是必须的,没有的话报错。
报错这个修改过的文件(ctrl+s),Ubuntu中的解压缩工具会提示我们文件已经修改,是否更新,点击 确定就可以了,
然后就可以命令窗口中,再运行: java -jar hello.jar
类加载器
在java中,负责把class文件加载到内存的是类加载器(ClassLoader)
jvm启动之后:
启动类加载器 bootstrapClassLoader,非java语言实现
作用:加载指定路径中jar里面的class文件
路径1:C:\Program Files\Java\jdk1.8.0_74\jre\lib\
路径2:C:\Program Files\Java\jdk1.8.0_74\jre\classes\ ( 如果有这个目录的话)
例如:rt.jar
扩展类加载器 ExtClassLoader,java语言实现,
是ClassLoader类型的对象
作用:加载指定路径中jar里面的class文件( 只能是jar中存在的class)
路径:C:\Program Files\Java\jdk1.8.0_74\jre\lib\ext\
例如:ext中默认存在的jar,或者用户放到ext目录下的jar包
应用类加载器 AppClassLoader,java语言实现,是ClassLoader类型的对象
作用:加载指定路径中class文件或者jar里面的class文件
路径:CLASSPATH中配置路径,这个是用户自己配置的
例如:.:bin:hello.jar
双亲委托机制
作为了解的内容 多个类加载器之间共同协作,
然后把需要使用或运行的类加载到内存去执行,它们直接共同合作的方式就是双亲委托机制。
例如:java com.briup.test.Hello 命令
现在要加载Hello.class文件中的类
首先加载任务就交给了AppClassLoader
然后AppClassLoader把这个任务委托给自己的父加载器,
也就是ExtClassLoader
然后ExtClassLoader把这个任务委托给自己的父加载器,
也就是bootstrapClassLoader
然后bootstrapClassLoader就尝试去加载Hello这个类,
但是在指定路径下并没有找到
然后任务又交回给了ExtClassLoader,
ExtClassLoader尝试加载Hello这个类,
但是在指定路径中没找到
然后任务又交回给了AppClassLoader
最后AppClassLoader从CLASSPATH中指定的路径里面找到并加载了这个Hello类,完成类加载的过程
类加载经过字节码验证,虚拟机版本不同会不兼容
(JVM规范校验)和代码逻辑校验
标识符起名规则:::::
命名规则
标示符可以由字母、数字、下划线_ 、美元符号$组成
标示符开头不能是数字
标识符中的字符大小写敏感
标识符的长度没有限制
标示符不能使用java中的关键字或保留字
类和接口,首字母大写,如果是俩个单词,第二个单词的首字母大写
例如,public class Account{} ,public interface AccountBase{}
方法和变量,首字母小写,如果是俩个单词,第二个单词的首字母大写
例如,public void getStudentName(){} , int personNum = 1;
常量,全部字母大写,如果是俩个单词,使用下划线分隔
例如,public static final int MAX_NUM = 10;
尽量使用有意义的名字,尽量做到见名知义。
例如,int numOfStudnet = 10; String userName = “tom”;
数据类型
基本的数据类型
byte short int long float double char boolean
byte:每8个位 (bit)组成一个字节(Byte),
所以,1个字节=8位0101代码,
例如 0000 0001
例如,0000 0001 ,表示二进制的数字1,它是1个字节,共8位0101代码组成
boolean:不能用0和1,必须用true和false
char:
***char类型占2个字节(16位)***,用来表示字符,是基本数据类型,
String表示字符串,是类类型。
一个String是由0~n个char组成
例如,字符使用单引号表示,字符串使用双引号表示。
引用的数据类型
字符编码
Java语言对文本字符采用Unicode编码。由于计算机内存只能存取二进制数据,因此必须为各个字符进 行编码。 例如:a --编码–> 0000 0000 0110 0001
char值 (重点)
例如,字符’a’,的表示形式:
二进制数据形式为 0000 0000 0110 0001
十六进制数据形式为 0x0061
十进制数据形式为 97
//使用具体字符来表示a
char c = ‘a’;
//使用Unicode编码值表示字符a
char c = ‘\u0061’;
//0x开头的数字位十六进制,使用十六进制表示字符a
char c = 0x0061;
//使用十进制数字表示字符a char c = 97;
//0开头的数字为八进制,使用八进制表示字符a
char c = 0141;
//注意:一个中文汉字就是一个字符
char c = ‘中’;
5.3.4 转义字符
在给字符变量赋值的时候,
通常直接从键盘输入特定的字符,
而不会使用Unicode字符编码,因为很难记住各种字符的Unicode字符编码值。
但是对于有些特殊字符,比如一个单引号(’),如不知道它的Unicode字符编码,直接从键盘输入编译
//编译出错 char c = ‘’’;
//为了解决这个问题,可采用转义字符(\)来表示单引号和其他特殊字符:
char c = ‘’’; char c = ‘\’;
\n 换行符,将光标定位到下一行的开头
\r 回车,把光标移动到行首(和环境有关)
\t 垂直制表符,将光标移到下一个制表符的位置
\ 反斜杠字符 ’ 单引号字符 " 双引号字符
整型(默认为int)
byte8位
short16位
int32位
long64位
0开头 八进制 0x开头 十六进制 0b开头 二进制
long类型后面要加L long a1 = 1L;
浮点型
float 32位 1符号位 8指数位 23尾数位
double 64位 1符号位 11指数位 52尾数位
保证精度用BigDecimal类
变量
java中的数据类型有八种基本类型,三种引用类型
八种基本类型:byte、short、int、long、float、double、boolean、char
三种引用类型:类类型、接口类型、数组类型
对象
computer
品牌 颜色 材质 价格 cpu 显卡 内存 磁盘
对象一般都会具有一些属性和方法
属性表示对象本身的一些特点
方法表示对象本身的一些行为
例如, 学生有身高、体重等属性,
学生还有学习、运动等方法
老师有年龄、专业等属性,
老师还有上课、布置作业等方法
教室有位置、大小等属性,
教室还有添加学生、添加老师等方法
使用八种基本类型中的任意一种类型,声明出的变量,就是基本类型变量,
例如 int a;
使用三种引用类型中的任意一种类型,声明出的变量,就是引用类型变量,
例如 Student stu;
基本类型变量和引用类型变量的区别:
基本类型变量只能接收基本类型数据,它是一种比较简单的数据,没有属性,也没有方法
引用类型变量只能接收引用类型数据(也就是对象),但对象是一种比较复杂的数据,它里面可 以有很多属性,也可以有很多方法
引用类型变量,简称为引用,它可以用来接收对象,也叫做引用指向对象。
可以看出: 基本类型变量只能接收基本类型数据,只能表示最简单数字(8/16/32/64位) 引用类型变量只能接收引用类型数据(对象),可以访问属性、调用方法,完成比复杂的功能
基本类型变量和引用类型的变量核心区别:是否可以指向对象