Java 介绍

Java 简介

  • Java 是美国 Sun 公司(Stanford University Network)在 1995 年推出的计算机语言。
  • Java 之父:詹姆斯·高斯林(James Gosling)
  • 2009 年,Sun 公司被甲骨文公司收购。

Java 语言的三个版本:

  • JavaSE: Java 语言的标准版,用于桌面应用的开发,是以下两个版本的基础。
  • JavaME: Java 语言的小型版,用于嵌入式消费类电子设备。
  • JavaEE: Java 语言的企业版,用于 Web 方向的网站开发。

Java 语言跨平台原理

Java 程序并非是直接运行的,而是 Java 编译器将 Java 源程序编译成与平台无关的字节码文件(class 文件),然后由 Java 虚拟机(JVM)对字节码文件解释执行。

所以在不同的操作系统下,只需安装不同的 Java 虚拟机即可实现 Java 程序的跨平台。

JRE 和 JDK

  • JVM(Java Virtual Machine):Java 虚拟机。
  • JRE(Java Runtime Environment):Java 运行环境,包含了 JVM 和 Java 的核心类库(Java API)。
  • JDK(Java Development Kit):Java 开发工具,包含了 JRE 和开发工具。

总结:只需安装 JDK 即可,它包含了 Java 的运行环境和虚拟机。

JDK 下载/安装说明

通过 Oracle 官方网站下载对应版本的 JDK。

JDK 安装目录说明:

目录名称 说明
bin 该路径下存放了 JDK 的各种工具命令。javac 和 java 就放在这个目录。
conf 该路径下存放了 JDK 的相关配置文件。
include 该路径下存放了一些平台特定的头文件。
jmods 该路径下存放了 JDK 的各种模块。
legal 该路径下存放了 JDK 各模块的授权文档。
lib 该路径下存放了 JDK 工具的一些补充 JAR 包。

Java 语法说明

“Hello World”示例:

注释

注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。

Java 中的注释分为三种:

1)单行注释:单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。

// 单行注释

2)多行注释:多行注释的格式是使用/**/将一段较长的注释括起来。

/*
多行注释
注意:多行注释不能嵌套使用
*/

3)文档注释:文档注释以/**开始,以*/结束,是 Java 特有的注释,其中注释内容可以被 JDK 提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

Javadoc –d 指定存储文档的路径 -version –author(可选参数) 目标文件

关键字

Java 的关键字对 Java 的编译器有特殊的意义,他们常被用来表示一种数据类型,或者表示程序的结构等。关键字不能用作变量名、方法名、类名、包名。

关键字的特点:

  • 关键字的字母全部小写。
  • 常用的代码编辑器对关键字都有高亮显示,比如 public、class、static 等。
  • 注意:main 不是关键字,但可以理解为比关键字更为关键的单词,是 JVM 唯一识别的单词。

标识符

标识符是程序员在编写 Java 程序时,自定义的一些名字,例如 helloworld 程序里关键字 class 后跟的“HelloWorld”,就是我们定义的类名。类名就属于标识符的一种。

标识符除了应用在类名上,还可以用在变量、函数名、包名上。

标识符必须遵循以下规则:

  • 标识符由英文字符大(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
  • 不能以数字开头,不能是关键字。
  • 区分大小写。
  • 标识符可以为任意长度。

Java 中的标识符命名规范:

  • 包名:多个单词组成时所有字母小写(例:package、com.util)
  • 类名和接口名:多个单词组成时所有单词的首字母大写(例:HelloWorld)
  • 变量名和函数名:多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
  • 常量名:多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE)

注意:上述只是为了增加代码规范性、可读性而做的一种约定,但在定义标识符时最好还是见名知意,提高代码阅读性。

数据类型

Java 是一个强类型语言,Java 中的数据必须明确数据类型。

在 Java 中的数据类型包括基本数据类型和引用数据类型两种。

基本数据类型

Java 的基本数据类型有 4 类 8 种:

四类 八种 内存占用(字节) 取值范围 说明
整数类型 byte 1 最小值是 -128(-2^7)
最大值是 127(2^7-1)
默认值是 0
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一。
short 2 最小值是 -32768(-2^15)
最大值是 32767(2^15 - 1);
默认值是 0
short 数据类型也可以像 byte 那样节省空间。一个 short 变量是 int 型变量所占空间的二分之一。
int(默认类型) 4 最小值是 -2,147,483,648(-2^31)
最大值是 2,147,483,647(2^(31-1))
默认值是 0
long 8 最小值是 -9,223,372,036,854,775,808(-2^63)
最大值是 9,223,372,036,854,775,807(2^(63-1))
默认值是 0L
这种类型主要使用在需要比较大整数的系统上;
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
浮点类型 float 4 默认值是 0.0f float 数据类型是单精度、32 位、符合IEEE 754 标准的浮点数;
范围规模可变,保留 7 位小数;
float 在储存大型浮点数组的时候可节省内存空间;
浮点数不能用来表示精确的值,如货币;
double(默认类型) 8 默认值是 0.0d double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
范围规模可变,保留 15 位小数;
浮点数的默认类型为 double 类型;
double类型同样不能表示精确的值,如货币。
字符类型 char 2 最小值是 \u0000(十进制等效值为 0)
最大值是 \uffff(即为 65535)
char 类型是一个单一的 16 位 Unicode 字符;
char 数据类型可以存储任何字符。
布尔类型 boolean 1 只有两个取值:true 和 false
默认值是 false
boolean 数据类型表示一位的信息。

引用数据类型

引用数据类型有类(class)、接口(Interface)、数组(Array)等。

Book b = new Book();
Book c = new Book();
// 声明两个 Book 的引用变量并创建两个 Book 对象,然后将 Book 对象赋值给引用变量。
b = c;
// 把变量 c 赋值给变量 b,此时 b、c 对应 Book2,而 Book1 已经没有引用,会被垃圾回收。
c = null;
// 代表它不再引用任何事物,但还是个可以被指定引用其他Book的引用变量。

隐式类型转换

隐式类型转换是指把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。

这种转换方式是自动的,直接书写即可。例如:

double num = 10;  // 将 int 类型的 10 直接赋值给 double 类型
System.out.println(num); // 输出 10.0

整数默认是 int 类型,因此 byte、short 和 char 类型数据在参与整数运算均会自动转换为 int 类型。

即多个不同数据类型的数据在运算的时候,结果取决于大的数据类型。

强制类型转换

强制类型转换是指把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。

强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;

示例:

double num1 = 5.5;
int num2 = (int) num1; // 将 double 类型的 num1 强制转换为 int 类型
System.out.println(num2); // 输出 5(小数位直接舍弃)

案例:

byte a = 3;
byte b = 4;
byte c = a + b; // 错误。因为两个 byte 变量相加,会先提升为 int 类型
byte d = 3 + 4; // 正确。常量优化机制

常量优化机制:在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在byte取值范围内,在则编译通过,不在则编译失败。

编译器在编译的时候能确认常量的值,但不能确认变量的值,变量存储的值只有在运行的时候才会在内存分配空间。

变量

变量的定义:在程序运行过程中,其值可以发生改变的量。

从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。

变量的定义方式有如下 3 种:

  1. 声明变量并赋值
数据类型 变量名 = 初始化值;
int age = 18;
System.out.println(age);
  1. 先声明,后赋值(在使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
  1. 在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,因为降低了程序的可读性。
int a = 10, b = 20;  // 定义int类型的变量a和b,中间使用逗号隔开
System.out.println(a);
System.out.println(b); int c,d; // 声明int类型的变量c和d,中间使用逗号隔开
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);

变量的修改:

int a = 10;
a = 30; // 变量前面不加数据类型时,表示修改已存在的变量的值。
System.out.println(a);

Java 简介与安装、语法说明、数据类型的更多相关文章

  1. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  2. Java基础:Java简介及安装配置(1)

    Java简介 Java是Sun公司于1995年推出的高级编程语言,具有跨平台特性,编译后的程序能够运行在多种类型的操作系统平台上. 1.1 Java应用程序版本 Java的3个独立用于开发不同类型应用 ...

  3. java 复习整理(一 java简介和基础语法)

    现在公司用的是封装太多东西的平台开发,觉着之前学的东西很多都忘了,所以想好好总结回顾一下.之前总是想学很多编程语言像python.s6.node.react,但现在越来越体会到编程语言只是一个开发的工 ...

  4. Java简介(3)-基本语法

    1.大小写敏感 2.类名 3.方法名. 4.源文件名

  5. Java Gradle入门指南之简介、安装与任务管理

        这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍.    ...

  6. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  7. redis简介、安装、配置和数据类型

    redis简介.安装.配置和数据类型 redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理. 它支持字符串.哈希表.列表.集合.有序集合, ...

  8. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  9. java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式

    Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...

随机推荐

  1. Linux命令(九)之安装mysql

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  2. 4、关于numpy.random.seed()的使用说明

    定义:seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差 ...

  3. 10分钟了解微服务、容器和Kubernetes

    什么是微服务? 什么是微服务?你应该使用微服务吗?微服务与容器和 Kubernetes 有什么关系?如果这些问题在您的日常生活中不断出现,那么这篇文章适合您. 从根本上说,微服务只是一个运行在服务器或 ...

  4. 客户端连接mysql数据库反应慢

    远程客户端连接MysqL数据库太慢解决方案 局域网客户端访问mysql 连接慢问题解决 编辑mysql配置文件 # vi my.conf [mysqld] skip-name-resolve 重启my ...

  5. Vue系列-02-axios

    vue.js和aixos.js # https://blog-static.cnblogs.com/files/lichengguo/vue.js # 下载该文件,保存的路径为代码同级目录 js/vu ...

  6. DVWA靶场之XSS(Reflected)通关

    反射型xss Low: <?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_ ...

  7. STP工作流程

    第一步:选择一个根网桥: 第二步:在每个非根网乔上选举一个根端口: 第三步:在每个网段上选举一个指定端口: 第四步:阻塞非根,非指定端口:

  8. vivo商城计价中心 - 从容应对复杂场景价格计算

    一.背景 随着vivo商城的业务架构不断升级,整个商城较为复杂多变的营销玩法被拆分到独立的促销系统中. 拆分后的促销系统初期只是负责了营销活动玩法的维护,促销中最为重要的计价业务仍然遗留在商城主站业务 ...

  9. 题解 Sequence

    传送门 只会爆搜系列 关于「本质不同的子序列个数」:限定长度,无限制(就是这题) 无限制的柿子是(令 \(dp[i]\) 为以 \(i\) 为结尾的不同子序列个数) \(dp[i] = \sum dp ...

  10. uniapp封装小程序雷达图组件实现

    效果图: view <canvas id="radar-canvas" class="radar-canvas" type="2d"& ...