当前位置: 首页 > news >正文

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文件名必须相同,但可以有多个非公共类。

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

编译Java程序:

javac HelloWorld.java

 运行Java程序:

javac HelloWorld

1.5 输出与注释

 1.5.1 打印输出

System.out.println("Hello world!"); // 打印一行
System.out.print("Hello World!"); // 打印一段

1.5.2 注释

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

2.1.3 标识符

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

2.3.1 基本类型

基本类型关键字大小

布尔型

boolean1位
字节型byte8位
短整型short16位
字符型char16位
整型int

32位

浮点型float 后面加F/f32位
长整型long 后面加L/l64位
双精度double 后面加D/d64位

字符型可以直接使用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

强制类型转换:

数据类型变量1 = (数据类型)变量2;

2.4 操作符

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

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

位运算:

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

关系运算:

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

2.5.3 转移语句

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

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内部会将一个字符型数组看成一个字符串。数组变量名储存在栈中,也就是首地址,而在堆中储存数组元素。

数组初始化:

        // 静态初始化: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;

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

 

相关文章:

  • 基于ssm的学生选课管理系统的设计与实现
  • 基于ssm的酒店民宿管理系统的设计与实现
  • JAVA面向对象编程 JAVA语言入门基础
  • 【机器学习-07】逻辑回归(Logistic Regression)的介绍和python实现
  • LeetCode 1027——最长等差数列
  • 开源流程图表库(02):Draw.io在线绘制各类图表,导出html使用
  • 【jvm】jinfo使用
  • javaSwing宿舍管理系统(三个角色)
  • MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?
  • 在 MacOS 中安装
  • 【Postman】工具使用介绍
  • 代码随想录Day55:两个字符串的删除操作、编辑距离
  • 【STL源码剖析】【2、空间配置器——allocator】
  • 【数据结构取经之路】队列循环队列
  • 开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析)
  • 【391天】每日项目总结系列128(2018.03.03)
  • Android开源项目规范总结
  • conda常用的命令
  • flutter的key在widget list的作用以及必要性
  • java小心机(3)| 浅析finalize()
  • Linux快速复制或删除大量小文件
  • Markdown 语法简单说明
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PermissionScope Swift4 兼容问题
  • PHP的类修饰符与访问修饰符
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 关于使用markdown的方法(引自CSDN教程)
  • 中文输入法与React文本输入框的问题与解决方案
  • 最近的计划
  • HanLP分词命名实体提取详解
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​力扣解法汇总946-验证栈序列
  • !$boo在php中什么意思,php前戏
  • $ git push -u origin master 推送到远程库出错
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (javascript)再说document.body.scrollTop的使用问题
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (solr系列:一)使用tomcat部署solr服务
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第二周)效能测试
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (四) Graphivz 颜色选择
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.01.09
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)fock函数详解
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET中 MVC 工厂模式浅析
  • .Net中ListT 泛型转成DataTable、DataSet
  • [100天算法】-x 的平方根(day 61)
  • [Avalon] Avalon中的Conditional Formatting.