Java学习笔记01

1.1 Java简介

Java的前身是Oak,詹姆斯·高斯林是java之父。

1.2 Java体系

Java是一种与平台无关的语言,其源代码可以被编译成一种结构中立的中间文件(.class,字节码文件)于Java虚拟机上运行。

1.2.3 专有名词

  1. JDK提供编译、运行Java程序所需要的种种工具及资源。
  2. JRE是运行Java所依赖的环境的集合。
  3. JVM是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。
  4. SDK开发工具包。

因范围JDK>JRE>JVM,所以只需要安装JDK即可。

1.2.4 Java跨平台管理

Java字节码的格式通用,具有跨平台的特性,但这种跨平台建立在JVM虚拟机上,只有通过JVM处理之后,才可以将字节码转换为机器码运行。

JVM虚拟机使Java具有"一次编译,随处运行"的特质:

  1. 首先,将Java源程序编译成Java字节码。
  2. 其次,字节码在本地或通过网络传送给JVM。
  3. 再次,JVM对字节码进行即时编译或解释执行后形成二进制的机器码。
  4. 最后,生成的机器码可以在硬件设备上运行。

Java字节码的两种执行方式:

  1. 解释执行(通常采用):逐条读入,逐条翻译。
  2. 即时编译执行:JIT编译器将自己吗编译成本机器代码,并把编译过的机器码保存起来以备下次使用。

1.2.5 垃圾回收机制

GC实现动态回收垃圾,可以自动识别不再被程序引用的对象加以回收,可以通过将某对象的引用变量置空来加速对于该对象的回收。垃圾回收一般是在CPU空闲或内存不足时自动进行的,程序员无法确定GC回收的时间和顺序,虽然可以通过调用对象的finalize()来建议,但仍不能保证。此外,由于JRE会使用后台进程检测和控制GC,所以必然会对系统产生一定影响。

1.3.2 JDK目录

  • bin:JDK中命令以及工具所在目录。
  • jre:运行环境目录。
  • lib:类库所在目录。
  • db:附带数据库目录。
  • include:包含本地代码的C语言头文件的目录。
  • scr.zip:源代码压缩文件。

1.3.3 JDK常用工具

  • javac:编译器,编译为字节码文件(.class文件)。gcc是c语言的编译器,c++是c++的编译器。
  • java:Java字节码解释器。解释执行字节码文件。
  • javadoc:文档生成器。代码中的文档注释生成HTML格式的Java API文档。

1.4 Hello World 程序

所有代码都写在类体之中,因为Java是一个纯面向对象语言,一个完整的Java程序至少有一个类。一个Java文件只能有一个公共类,且该公共类的类名与Java文件名必须相同,但可以有多个非公共类。

java 复制代码
public class HelloWord {
	public static void main(String[] args) {
		System.out.println("Hello world!");
	}
}

编译Java程序:

java 复制代码
javac HelloWorld.java

运行Java程序:

java 复制代码
javac HelloWorld

1.5 输出与注释

1.5.1 打印输出

java 复制代码
System.out.println("Hello world!"); // 打印一行
System.out.print("Hello World!"); // 打印一段

1.5.2 注释

java 复制代码
        // 单行注释
		/*
		 * 这是多行注释
		 */
		/**
		 * 这是文档注释
		 * 可以通过javacdoc将注释的内容生成HTML格式JavaAPI文档
		 */

2.1.3 标识符

除了下划线"_"和"$"符号以外,不包含任何其他特殊字符,如空格。

2.3.1 基本类型

基本类型 关键字 大小
布尔型 boolean 1位
字节型 byte 8位
短整型 short 16位
字符型 char 16位
整型 int 32位
浮点型 float 后面加F/f 32位
长整型 long 后面加L/l 64位
双精度 double 后面加D/d 64位

字符型可以直接使用Unicode值来表示,比如'\u00FF'等。

2.3.2 引用类型

Java包括5种引用类型:

  1. 数组
  2. 接口
  3. 枚举
  4. 空类型:值为null的类型。

2.3.3 类型转换

自动类型转换:

不损失精度------

byte------>short------>int------>long/double

char------>int

float------>double

损失精度(整型转空间不大于的浮点数)------

int---->float

long---->float/double

强制类型转换:

java 复制代码
数据类型变量1 = (数据类型)变量2;

2.4 操作符

一元操作符:++、--、!、~、(type)强转

对于/和%来讲,如果其中至少有一个操作数是浮点数,就可以允许除数为0,结果是Infinity和(-Infinity);而如果是对0取余,那任何操作数结果都是NaN(非数)。

位运算:

操作符 描述 示例(均原码)
& 按位与,1与1返回1 001 & 111 = 001
| 按位或,存在1返回1 001 | 101 = 101
^ 按位异或,相同返回0反之返回1 001 ^ 101 = 100
<< 左移,右边空出补0,等价乘方 10011010 << 1 = 10110100
>> 右移,左边空出补0/1(看符号),等价开方 10011010 >> 1 = 10001101
>>> 无符号右移,无视正负号左边空出补0 10011010 >> 1 = 01001101

关系运算:

==使用过程中,如果比较的两个都是数值型,那只要值相等都返回true,即使是字符和整型、整型和浮点比较

2.5.3 转移语句

break和标签语句配合使用可以跳出任意循环/程序块。

java 复制代码
outer : for(int i = 0; i < 5; i ++) {
			for(int j = 0; j < 5; j ++) {
				System.out.println(i+" ");
				if(j == 2) break outer;
			}
		}

2.6 数组

直接输出数组名的时候,会输出数组对象的哈希码,但是如果是字符数组,则会输出一个""空字符串,这是因为Java内部会将一个字符型数组看成一个字符串。数组变量名储存在栈中,也就是首地址,而在堆中储存数组元素。

数组初始化:

java 复制代码
        // 静态初始化:
		int[] a1 = {1, 2, 3};
		int[] a2 = new int[] {1, 2, 3};
		int a3[] = {1, 2, 3};
		// 动态初始化:
		int[] a4 = new int[2];
		a4[0] = 1;

如果是二维数组,则可以不必要求每个数据元素的长度相等,也就是内部的一维数组的长度可以不必相同,使用动态初始化即可。

相关推荐
前行的小黑炭18 分钟前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
Java技术小馆23 分钟前
如何设计一个本地缓存
java·面试·架构
XuanXu1 小时前
Java AQS原理以及应用
java
风象南4 小时前
SpringBoot中6种自定义starter开发方法
java·spring boot·后端
mghio13 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室18 小时前
java日常开发笔记和开发问题记录
java
咖啡教室18 小时前
java练习项目记录笔记
java
鱼樱前端18 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea19 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq