如题目>▽<
注:本笔记只记录本人不会\不熟练的内容,在c++基础上进行学习
一些黑话
三大平台
- JAVA SE (JAVA Standard Edition) 桌面端
- JAVA EE (Java Enterprise Edition) 企业端
- JAVA ME (JAVA Micro Edition) 移动\嵌入式端 目前寄了
JRE、JDK、JVM
JDK (Java Development kit):Java开发工具包
- JVM(Java Virtual Machine): Java虚拟机,运行程序的地方
- 核心类库:Java定义好的类库
- 开发工具
- Javac 编译工具
- java 运行工具
- jdb 调试工具
- jhat 内存分析工具
小结:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
语言基础
编译操作
1 | javac HelloWorld.java ==>生成其中的主类HelloWorld.class文件 |
代码
1 | class HelloWorld{ |
冷知识:Windows的文件命名不区分大小写,也就是比如一个文件叫AB你想新建一个ab会提示重复文件。
编译后会生成一个或多个字节码文件,每个字节码文件对应一个Java类,字节码文件名与类名相同
注释
文档注释:文档注释的内容可以被JDK提供的工具javadoc解析,生成一套以网页文件形式体现的该程序的说明文档。(格式/** */
,普通多行注释/* */
)
1 | /** |
JAVA API
- API(Application Programming Interface,应用程序变成接口),是Java提供的基本编程的接口
Java优缺点
优点
- 跨平台性:核心优势,注重移植和跨平台性,比如Java的int踊跃都是32位,
Write once,run anywhere
,原理是将代码运行在统一的JVM中。 - 面向对象性:面向对象是一种程序设计继续,非常
适合大型软件的设计和开发
,面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚、低耦合
的标准。 - 健壮性:吸收c语言优点,但去掉了影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
- 安全性高:适合网络、分布式环境,需要提供一个安全机制以防止恶意代码的攻击,如
安全防范机制(ClassLoader类加载器)
可以分配不同的命名空间以防替代本地的同名类、字节代码检查。 - 简单性:是C++语法的简化版,比如:头文件、指针运算、结构、联合、操作符重载、虚基类等
- 高性能:目前Java可以通过JIT(JUST IN TIME)即时编译技术提高运行效率。
缺点
- 语法复杂、严谨
- 适用大型网站开发,整个架构会比较重
- 并非适用于所有领域,Objective C、Swift在ios上。浏览器的处理几乎全是JavaScript,Windows程序通常C++或C#编写,Java在服务器端的编程和跨平台客户端应用领域则很有优势
变量与运算符
关键字
标识符(identifier)
Java中变量、方法、类等要素命名的字符序列(就是起的名字)
命名规则
由26个英文字母大小写、数字、
_
、$
组成
数字不可以开头:int 123L = 12; long l = 123L
不能使用关键字和保留字,但可以包含
Java严格区分大小写,长度无限制
不能有空格
命名规范
包名:多单词组成时所有字母都小写:xxxyyyzzz
例如:java.lang、com.daisuke.bean等
类名、接口名、多单词组成:所有单词首字母大写XxxYyyZzz(大驼峰)
例如:HelloWorld、String、System等
变量名、方法名、多单词组成时,第一个单词首字母小写,第二个单词开始时首字母大写:xxxYyyZzz(小驼峰)
例如:age,name,bookName,binarySearch
常量名:所有字母都大写,多单词时每个单词下划线连接:XXX_YYY_ZZZ
例如:MAX_VALUE,PI
变量
- 类型:
- 基本数据类型
- 整型:byte、short、int、long
- 浮点型:float、double
- 字符型:char
- 布尔型:boolean
- 引用数据类型
- 类(class)
- 数组(array)
- 接口(interface)
- 枚举(enum)
- 注解(annotation)
- 记录(record)
- 基本数据类型
- 说明:
- 变量都有作用域,只在作用域里有效
- 同一个作用域内不能声明两个同名变量
- 变量赋值必须满足变量的数据类型,并且需在数据类型的有效范围内变化
整型
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节=8bit | -128~127 |
short | 2字节 | -2^15~2^15-1 |
int | 4字节 | -2^31~2^31-1(约21亿) |
long | 8字节 | -2^63~2^63-1 |
- long类型变量,字面量要以
l
或L
作为后缀 - Java变量通常声明为int型
- Java的整型
常量默认为int型
浮点型
类型 | 占用存储空间表数范围 | |
---|---|---|
单精度float | 4字节 | -3.403E38 ~ 3.403E38 |
双精度double | 8字节 | -1.798E308 ~ 1.798E308 |
- float:单精度,尾数可以精确到7位有效数字
- double:双精度,精度是float的两倍
- 定义float类型变量,赋值时需要以
f
或F
作为后缀,因为Java的浮点型默认为double型
- 浮点类型计算有误差,需要准确可以使用
BigDecimal类
字符型
- char(2字节)
- Java的所有字符都使用Unicode编码
- 表现形式
- 形式1:使用单引号括起来的
单个字符
- 例如:char c1 = ‘a’; char c2 = ‘哈’;
- 形式2: 直接使用Unicode值表示的常量’
\uXXXX
‘,其中XXXX代表一个十六进制整数。- 例如:\u0023表示’#’
- 形式3: 使用
转义字符'\'
将其后的字符转变为特殊字符型常量- 例如:char c = ‘\n’;
- 形式1:使用单引号括起来的
布尔类型:boolean
- 类型只有true、False
- 不可使用0或非0的整数代替,与C语言不同
- Java的boolean值在编译后都会使用java虚拟机中的int数据类型代替:true为1,false为0(因此内存分配为4字节)
数据类型转换
- byte、short、char运算需要用int来接收,这是由于这三种类型表示的范围较小,进行运算容易溢出。
- 常量前面加(类型)进行强制转换
String
- 引用数据类型,只能使用
+
进行字符串拼接,是类,因此首字母大写不能与基本数据类型相互转换。但可以使用Integer类将数字字符串转换成int
1 | String str = "10" |
进制
1 | int num1 = 103;// 十进制 |
- 计算机数据的存储使用二进制的
补码
形式存储,最高位为符号位
- 正数原反补码相同
- 负数
- 原码:最高位符号位为1,其余为该负数的绝对值的二进制表示
- 反码:最高位不变,其余为取反
- 补码:反码+1
运算符
分类 | 运算符 |
---|---|
算术运算符 (7个) | +、-、*、/、%、++、– |
赋值运算符 (12个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等 |
比较(或关系)运算符 (6个) | >、>=、<、<=、==、= |
逻辑运算符 (6个) | &、|、^、!、&&、|| |
位运算符 (7个) | &、|、^、~、<<、>>、>>> |
条件运算符 (1个) | (条件表达式)?结果1:结果2 |
Lambda运算符 (1个) | -> |
- 比较关系符:instanceof 检查是否是类的对象, “Hello” instanceof String =》ture