昨天我已经学会了在cengot7终端里面使用命令写出了“Hello world”的java编译文件。
今天我学习了java的几种类型还有java的一些概念,下面我给大家展示我整理的知识点:
Java的三种核心机制
首先是了解Java的核心机制,Java中有两种核心机制:
①Java虚拟机(Java Virtual Machine)
②垃圾收集机制(Garbage collection)
③ 代码安全性检测Code Security
一、核心机制之Java虚拟机
① Java虚拟机可以理解成一个以字节码为机器指令的CPU
② 对于不同的运行平台,有不同的虚拟机
③ Java虚拟机机制屏蔽了底层运行平台的差别,能够很好的实现跨平台
Java编译器 执行 |--->JVM for UNIX
源程序(*.java文件)========>字节码(*.class文件)=========>|--->JVM for Windows
|--->JVM for other
在不同的平台上有相应平台的虚拟机(相当于Java程序是运行在Java准备的虚拟环境中),这样就保证了Java程序的跨平台性.....
注:由此也可以看出Java是解释型语言
补充说明:语言类型
①编译型语言:直接编译成操作系统可识别的可执行文件,例如C,C++
②解释型语言:需要首先编译为.class等字节码文件后在逐行解释为操作系统可识别的可执行文件,例如Java
二、核心机制之垃圾收集
Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。
分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null即可。对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象,通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达的”,当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间
GC在JVM中通常是由一个或一组进程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CPU,当进程运行时,应用程序停止运行。
因此,当GC运行时间较长时,用户能够感到Java程序的停顿,另一方面,如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,这即要求我们在设计GC时要均衡效率。
三、代码安全性检测Code Security
在运行时,执行机器只是将.class类文件通过交互后使用,一般情况下是看不到它的源代码.Java,如果
想要看到.Java源程序,就要通过专用反编译工具,才能够看到。这就体现了Java在运行环境中相对其它
语言来说,加强了代码的安全性
javadoc用法和注释
文档注释的格式
Java中有三种注释方式。前两种分别是 // 和 /* /,主要用于代码的注释,以此来方便代码的可读性。第三种被称作说明注释或文档注释,它以 /* 开始,以 /结束,文档注释允许你在程序中嵌入关于程序的信息,有了这个注释就可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。
/*
- …
- …
*/
在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述
javadoc用法
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author description |
@version | 指定类的版本 | @version info |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 用于指定参考的内容 | |
@throws | 抛出的异常,和@exception同义 |
Java标识符
一、语法基础
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
- 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
二、编码规范
- 类名首字母大写,大写字母分词 建议名词
- 方法名称首字母小写,大写字母分词
- 变量名称首字母小写,大写字母分词
- 包名称全小写,使用域名反转的方式定义
下面是一个错误的案例:
public class A {
public static void main(String[] args) {
int kk = 100;
System.out.println(Kk);//报错的原因是Java中严格区分大小写,所以kk和Kk是两
个不同的东西
}
}
JAVA是强类型语言
每个变量有类型,每个表达式有类型,而且每种类型都是严格定义的。Java编译器对所有的表达式和参
数都要进行类型相容性的检查,以保证类型是兼容的。任何类型的不匹配都将被报告为错误而不是警
告。在编译器完成编译以前,错误必须被改正过来
在Java语言数据类型可以分为两大类:基本类型(原生类型primitive type)和引用类型(复合类型
referance type)
4类 整数: byte 1B short 2B int 4B long 8B 默认为int 特殊后缀L/l
浮点数: float 4B double 8B 默认double 特殊后缀 f/F D/d
字符: 单引号 2B unicode[java默认0-65535]
布尔: true、false
引用类型: 复杂类型
class/interface 数组 null
注意:null属于引用类型,所以int k=null;语法错误
计算机中的数据存储方式
原码: 最高位为符号位,1表示负数,0为整数
- 123为01111011,-123为11111011
反码:反码跟原码是正数时一样;负数时,反码就是原码符号位除外,其他位按位取反
- 123为01111011,-123为10000100
补码:补码跟原码是正数时一样;负数时,补码就是原码符号位除外,其他位按位取反+1
- 123为01111011,-123为10000101
整数类型
byte 、short 、int 、long
byte字节整数 1B -128到127
short短整型 2B -32768到32767
int 整型 4B -2147483648到2147483647
long 长整型 8B -9223372036854775808到9223372036854775807
- 二进制整数,以0b或0B开头,例如0b10110010
- 八进制整数。以0开头,如0123表示十进制数83,-011表示十进制数-9。
- 十进制整数。如123,-456,0
- 十六进制整数。以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18
整数类缺省为int类型,如在其后有一个字母“L”表示一个long值。例如long k=123456789012345678L;
实际上末尾的L或者l都可以,但是一般不建议使用l
浮点数类型
两种浮点类型float和double
- float(单精度浮点型)取值范围:3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45
表示乘以10的负45次方) - double(双精度浮点型)取值范围:1.797693e+308~4.9000000e-324(同上)
double 类型比float 类型存储范围更大,精度更高。
通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据时float 型的,可以在数据后面加上 “F” 。
浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这时正常的。
字符类型char
char 有以下的初始化方式:
char ch = ‘a’; // 可以是汉字,因为是Unicode编码
char ch = 1010; // 可以是十进制数、八进制数、十六进制数等等。
char ch = ‘\0’; // 可以用字符编码来初始化,如:’\0’ 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思。
Java是用unicode 来表示字符,“中” 这个中文字符的unicode 就是两个字节。
String.getBytes(encoding) 方法获取的是指定编码的byte数组表示。
通常gbk / gb2312 是两个字节,utf-8 是3个字节。
如果不指定encoding 则获取系统默认encoding 。
基本类型之间的转换
转换分为自动转换和强制转换:
自动转换(隐式):无需任何操作。
强制转换(显式):需使用转换操作符(type)。
将6种数据类型按下面顺序排列一下:
double > float > long > int > short > byte
如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换。
1、自动转换
》int–> float
》long–> float
》long–> double
》float -->double without strictfp
2、强制类型转换
如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。严格地说,将byte转为char不属于narrowing conversion),因为从byte到char的过程其实是byte–>int–>char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。强制转换格式如下:
(target-type) value;
以上就是我今天学习并整理的所有知识点,当然还有一些是我查漏补缺找到的,对我来说是再一次的深度学习。