Java基础之——Java 语言语法

Java 语言语法

1、Java 语言环境搭建

  • JVM(Java Virtual Machine ):Java 虚拟机,简称 JVM,是运行所有 Java 程序的假想计算机,是 Java 程序的运行环境,是Java 最具吸引力的特性之一。我们编写的 Java 代码,都运行在 JVM 之上。
  • 跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用 Java 编写的软件可以运行在任何的操作系统上,这个特性称为 Java 语言的跨平台特性。该特性是由 JVM 实现的,我们编写的程序运行在 JVM 上,而 JVM 运行在操作系统上。

Java 是跨平台的,但 JVM 是不跨平台的。

Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机

1.1、JRE 和 JDK

  • JRE (Java Runtime Environment) :是 Java 程序的运行时环境,包含 JVM 和运行时所需要的核心类库
  • JDK (Java Development Kit):是 Java 程序开发工具包,包含 JRE 和开发人员使用的工具

我们想要运行一个已有的 Java 程序,那么只需安装 JRE 即可。

我们想要开发一个全新的 Java 程序,那么必须安装 JDK 。

三者关系: JDK > JRE > JVM


2、入门程序

Java 程序开发三步骤:编写编译运行

2.1、入门程序说明

编译运行是两回事

  • 编译:是指将我们编写的 Java 源文件翻译成 JVM 认识的 class 文件,在这个过程中, javac 编译器会检查我们所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。
  • 运行:是指将 class 文件交给 JVM 去运行,此时 JVM 就会去执行我们编写的程序了。

关于main方法

  • main 方法:称为主方法。写法是固定格式不可以更改。main 方法是程序的入口点或起始点,无论我们编写多少程序,JVM在运行的时候,都会从 main 方法这里开始执行。

2.2、添加注释

  • Java 中有单行注释和多行注释
    • 单行注释//开头 换行结束
    • 多行注释以 /*开头 以*/结束

2.3、标识符

  • 标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
  • 命名规则: 硬性要求
    • 标识符可以包含 英文字母26个(区分大小写)0-9 数字$(美元符号)_(下划线)
    • 标识符不能以数字开头。
    • 标识符不能是关键字。
  • 命名规范: 软性建议
    • 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
    • 方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
    • 变量名规范:全部小写。

3、数据类型

数据类型分类

Java 的数据类型分为两大类:

  • 基本数据类型:包括 整数浮点数字符布尔
  • 引用数据类型:包括 数组接口字符串

3.1、基本数据类型

四类八种基本数据类型:

数据类型关键字内存占用取值范围
字节型byte1个字节-128~127
短整型short2个字节-32768~32767
整型int(默认)4个字节-231次方~2的31次方-1
长整型long8个字节-2的63次方~2的63次方-1
单精度浮点数float4个字节1.4013E-45~3.4028E+38
双精度浮点数double(默认)8个字节4.9E-324~1.7977E+308
字符型char2个字节0-65535
布尔类型boolean1个字节true,false

Java 中的默认类型:整数类型是 int 、浮点类型是 double

3.2、变量的定义

格式

数据类型 变量名 = 数据值;

long 类型:建议数据后加 L 表示。

float 类型:建议数据后加 F 表示。

注意:

变量名称:在同一个大括号范围内,变量的名字不可以相同。

变量赋值:定义的变量,不赋值不能使用。


4、数据类型转换

Java 程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。

4.1、自动转换

  • 自动转换:将取值范围小的类型自动提升为取值范围大的类型

转换规格:

byteshortchar‐‐>int‐‐>long‐‐>float‐‐>double

4.2、强制转换

  • 强制转换:将取值范围大的类型强制转换成取值范围小的类型

转换格式:

数据类型 变量名 = (数据类型)被转数据值;

注意:

  1. 浮点转成整数,直接取消小数点,可能造成数据损失精度。
  2. int 强制转成 short 砍掉 2 个字节,可能造成数据丢失。

5、IDEA

5.1、IDEA 项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hq52ttRK-1612151174136)(素材/IDEA创建项目.png)]

我们来看一下项目文件夹:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbapuhxJ-1612151174138)(素材/idea项目文件夹.png)]

目录结构:

  • .idea 目录和 new.iml 和我们开发无关,是 IDEA 工具自己使用的;
  • out 目录是存储编译后的 .class 文件;
  • src 目录是存储我们编写的 .java 源文件。

5.2、IDEA 常用快捷键

快捷键功能
Alt+Enter导入包,自动修正代码
Ctrl+Y删除光标所在行
Ctrl+D复制光标所在行的内容,插入光标位置下面
Ctrl+Alt+L格式化代码
Ctrl+/单行注释
Ctrl+Shift+/选中代码注释,多行注释,再按取消注释
Alt+Ins自动生成代码,toString,get,set等方法
Alt+Shift+上下箭头移动当前代码行

6、方法

6.1、方法的格式

修饰符 返回值类型 方法名(参数列表){
	//代码省略...
	return 结果;
}

6.2、定义方法的两个明确

  1. 明确返回值类型
  2. 明确参数列表

6.3、方法重载

方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关

  • 参数列表:个数不同,数据类型不同,顺序不同
  • 重载方法调用:JVM 通过方法的参数列表,调用不同的方法

7、数组

7.1、数组的概念

  • 数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致

7.2、数组的定义

方式一:

  • 格式

    数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
    
    • 格式详解
      • 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
      • [] : 表示数组。
      • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
      • new:关键字,创建数组使用的关键字。
      • 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
      • [长度]:数组的长度,表示数组容器中可以存储多少个元素。
      • 注意:数组有定长特性,长度一旦指定,不可更改

方式二:

  • 格式

    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
    

方式三:

  • 格式:

    数据类型[] 数组名 = {元素1,元素2,元素3...};
    

7.3、数组存储原理内存图

7.3.1、JVM 的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

JVM 的内存划分:

区域名称作用
寄存器给 CPU 使用,和我们开发无关。
本地方法栈JVM 在使用操作系统功能的时候使用,和我们开发无关。
方法区存储可以运行的 class 文件。
堆内存存储对象或者数组,new 来创建的,都存储在堆内存。
方法栈方法运行时使用的内存,比如 main 方法运行,进入方法栈中执行。
7.3.2、数组在内存中的存储

一个数组内存图:

public static void main(String[] args) {
	int[] arr = new int[3];
	System.out.println(arr); //[I@50cbc42f
}

以上方法执行,输出的结果是 [I@5f150435,这个是什么呢?是数组在内存中的地址。new 出来的内容,都是在堆内存中存储的,而方法中的变量 arr 保存的是数组的地址

两个数组内存图:

public static void main(String[] args) {
	int[] a1 = new int[3];
    int[] a2 = new int[4];

    System.out.println(a1);	//[I@50cbc42f
    System.out.println(a2); //[I@75412c2f
}

两个变量指向一个数组:

public static void main(String[] args) {
	// 定义数组,存储3个元素
    int[] arr = new int[3];
    //数组索引进行赋值
    arr[0] = 5;
    arr[1] = 6;
    arr[2] = 7;
    System.out.println(arr[1]);	//6
    //定义数组变量arr2,将arr的地址赋值给arr2
    int[] arr2 = arr;
    arr2[1] = 9;
    System.out.println(arr); //[I@50cbc42f
    System.out.println(arr2); //[I@50cbc42f
    System.out.println(arr[1]); //9
}

7.4、数组的遍历

public static void main(String[] args) {
	int[] arr = { 1, 2, 3, 4, 5 };
	for (int i = 0; i < arr.length; i++) {
		System.out.println(arr[i]);
	}
}

7.5、数组反转

双指针最简单:

public static void main(String[] args) {
	int[] arr = { 1, 2, 3, 4, 5 };
	/*
		循环中定义变量min=0最小索引
		max=arr.length‐1最大索引
		min++,max‐‐
		*/
	for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
		//利用第三方变量完成数组中的元素交换
		int temp = arr[min];
		arr[min] = arr[max];
		arr[max] = temp;
	}
	// 反转后,遍历数组
	for (int i = 0; i < arr.length; i++) {
		System.out.println(arr[i]);
	}
}

7.6、数组作为方法参数和返回值

7.6.1、数组作为方法参数

以前的方法中我们学习了方法的参数和返回值,但是使用的都是基本数据类型。那么作为引用类型的数组能否作为方法的参数进行传递呢,当然是可以的。

  • 数组作为方法参数传递,传递的参数是数组内存的地址
7.6.2、数组作为方法返回值
  • 数组作为方法的返回值,返回的是数组的内存地址
7.6.3、引用传递和参数传递的区别

方法的参数为基本类型时,传递的是数据值。方法的参数为引用类型时,传递的是地址值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值