Java基本语法结构(一)

文章目录

一、前置准备

1. CMD

1.1 如何打开cmd

  1. win + r打开运行窗口
  2. 输入cmd回车

1.2 常用cmd命令

操作说明
盘符名词:切换到该盘符
dir列出当前路径下的所有内容
cd 目录进入单级目录
cd…回退到上一级目录
cd 目录1\目录2…进入多级目录
cd \回退到盘符目录
cls清屏
exit退出cmd

在windows操作系统当中,文件名或者文件夹名是忽略大小写的。

2. Java概述

2.1 Java是什么

人与计算机进行信息交流沟通的一种编程语言

1)Java版本:

  • Java5.0:Java第一个大版本更新(前面是1.1、1.2、1.3、1.4)
  • Oracle收购之后分为过渡版本和长期支持版本(LTS),以下是常用LTS
    • Java8.0:目前绝大数公司正在使用的版本,因为这个版本最稳定
    • Java17.0:目前最新的稳定版本
      版本向下兼容

2)Java的三大平台

  • JavaSE:SE即标准版,主要用来开发桌面应用。 C/C++加载速度快,更有优势
  • JavaME:ME即微缩版,主要用来做移动类、嵌入式开发。 已经被Android和iOS替代了
  • JavaEE:EE即企业版,主要从事后台服务器的开发。 也是Java的主要应用方向

3)Java的主要特性

  • 面向对象
  • 安全性
  • 多线程
  • 简单易用
  • 开源
  • 跨平台
    • 针对于不同的操作系统,Java提供了不同的虚拟机
    • 虚拟机会把Java语言翻译成操作系统能看得懂的语言

4)JDK和JRE
JDK包括JRE,JRE包括JVM

  1. JDK(Java Development Kit):Java开发工具,包含了JRE和开发工具
    • JVM
    • 核心类库(Java API)
    • 开发工具(javac、java、jdb、jhat…)
  2. JRE(Java Runtime Environment):Java运行环境
    • JVM
    • 核心类库(Java API)
    • 运行工具(删去了一些开发才会用到的工具)
  3. JVM(Java Virtual Machine):Java虚拟机,Java程序运行的地方

2.2 下载与安装

  1. Oracle官网下载jdk
  2. 安装一路下一步,注意路径不要有中文
    建议专门建一个文件夹,以后所有的开发工具都放到里面,方便管理

2.3 jdk安装目录

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

2.4 环境变量

作用:在 cmd 的任意目录下都可以启动某个程序
在启动软件时,操作系统会先在当前路径下找,如果找不到再到环境变量的路径中去找,如果都找不到就提示无法启动。

步骤:

  1. 右键我的电脑点击属性
  2. 找到高级系统设置
  3. 选择高级,点击环境变量
  4. 在系统变量中找到 PATH,点击编辑
  5. 新建输入程序的完整路径
  6. 可上移到最上面(更快)
    cmd 在环境变量中从上往下查找,上面的路径打开更快

最新从官网上下载的 JDK 安装时会自动配置 javac、java 的环境变量
JAVA_HOME :告诉操作系统 JDK 安装在了哪个位置(未来其他技术要通过这个找 JDK)

Path :告诉操作系统 JDK 提供的 javac(编译)、java(执行) 命令安装到了哪个位置

2.5 Java运行流程

  1. 编写程序
  2. 编译程序:编译后会产生一个.class后缀的字节码文件
    • .java 文件:自己编写的代码
    • .class 文件:计算机执行的文件
  3. 运行程序:运行的是编译之后的class文件
    • javac + 文件名.java (编译java文件)
    • java + 文件名(运行编译之后的class文件)

3. 高级记事本

常用的有 Editplus、Notepad++、Sublime,支持语法
Notepad++官网下载
设置 =>首选项 => 左侧选择新建 => 语言选择 Java 编码选择 ANSI,否则可能出现中文乱码

二、基本概念

1. 注释

注释的内容不参与编译和运行,仅仅是对代码的解释说明而已。
最讨厌写注释,和不写注释的人

  • 单行注释
// 单行注释
  • 多行注释
/*
多行注释
多行注释
*/
  • 文档注释(暂时用不上)
    javadoc工具根据文档注释生成文档
/**
文档注释 
文档注释 
*/

2. 关键字

2.1 关键字概念及特点

被 Java 赋予了特定含义的英文单词

  • 关键字字母全部小写
  • 常用的代码编辑器会有高亮显示
abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinalfinallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnstrictfpshortstaticsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile

2.2 class

作用:定义一个类
类:Java 项目中最基本的组成单元,一个完整的 Java 项目可能有成千上万个类

public class HelloWorld{ //class后面跟的是类名
//类名后面有一对大括号,是类的内容
}

3. 字面量

作用:告诉程序员数据在程序中的书写格式

字面量类型说明程序中的写法
整数不带小数的数字666,-88
小数带小数的数字13.14,-5.21
字符必须使用单引号,有且仅能一个字符‘A’,‘0’, ‘我’
字符串必须使用双引号,内容可有可无“HelloWorld”,“世界”
布尔值布尔值,表示真假,只有两个值:true,falsetrue 、false
空值一个特殊的值,空值null

扩展:

  • 制表符 \t:在打印的时候把前面字符串的长度补齐到8或8的整数倍(最少补1个空格,。最多补8个)
  • null :不能直接打印,如果要打印需用字符串类型“null”

4. 变量

变量是值的容器,定义变量可以存放值,变量可以输出打印、参与计算

//数据类型 变量名 = 数据值;
int a = 10; 

注意事项:

  • 变量名不能重复
  • 变量在使用前必须赋值
  • 在一条语句中,可以定义多个变量 可续性差

5. 数据类型

5.1 进制

二进制:逢二进一,借一当二
不同进制的表示形式:

  • 二进制:以 0b 开头
  • 十进制:默认
  • 八进制:以 0 开头
  • 十六进制:以 0x 开头

任意进制转十进制: 系数 * 基数的权次幂 相加
十进制转任意进制:除基取余(不断除基数到商为0,余数倒着拼起来)

5.2 Java数据类型的分类

  • 基本数据类型
  • 引用数据类型 数组和面向对象再深入学习

5.3 基本数据类型 (四类八种)

数值取值范围大小: double > float > long > int > short > byte

数据类型关键字内存占用(字节)取值范围
整数byte1-2^7 ~ 2^7-1 (-128~127)
short2-2^15 ~ 2^15-1 (-32768~32767)
int4-2^31 ~ 2^31-1(10的9次方)
long8-2^63 ~ 2^63-1(10的18次方)
浮点数float41.401298e-45 ~ 3.402823e+38
double84.9000000e-324 ~ 1.797693e+308
字符char20-65535
布尔boolean1true,false
byte a = 5;
short b = 10;
int c = 100;
long d = 10000000000L;  //L后缀
float e = 52.1f;   //f后缀
double f = 46.4561;
char g = '你';
boolean h = true;

注意事项:

  • 定义 long 类型变量时,在数据值的后面加上 L 后缀(大小写都可以,建议大写区分1和l)
  • 定义 float 类型变量时,在数据值的后面加上 F 后缀(大小写都可以)

6. 标识符

标识符:给类、方法、变量等起的名字

6.1 命名规则:

  1. 硬性要求:否则代码会报错
  • 只能由数字、字母、下划线_、美元符号$组成
  • 不能以数字开头
  • 不能是关键字
  • 区分大小写
  1. 软性建议: 代码不会报错,但是会让代码显得比较low
  • 小驼峰命名法:方法、变量名
    • 一个单词时全部小写
    • 多个单词时第一个单词首字母小写,其他单词首字母大写
  • 大驼峰命名法:类名
    • 一个单词时首字母大写
    • 多个单词时每个单词首字母大写

6.2 阿里巴巴命名规范

Java开发手册(黄山版).pdf

7. 键盘录入和输出

7.1 Scanner 类

Java 帮我们写好一个类叫 Scanner ,这个类可以接收键盘输入的数字,我们只要使用 Scanner 这个类就可以了

  1. 导包:告诉编译器 Scanner 这个类在哪
import java.util.Scanner;
  1. 创建对象: 创建一个 Scanner
Scanner sc = new Scanner(System.in);
  1. 接收数据: 将键盘录入的数据存起来
int i = sc.nextInt();

7.2 输入格式

  1. 遇到空格、回车、制表符停止
    • nextInt () :接收整数并返回
    • nextDouble() :接收浮点数,也能接收整数,但都当做浮点数返回
    • next() :接收任意数据,返回一个字符串
  2. 可以接收空格和制表符,遇到回车停止
    • nextLine() :接收一行数据,返回一个字符串

两套体系不能混用,如果先使用 1. 中输入再使用 nextLine 会导致 nextLine 接收不到数据

7.3 输出格式

  1. println 输出并换行
System.out.println("Hello World!");
  1. printf 格式化输出
    类似 C 语言中的 printf%s 表示占位符,输出默认无换行,可在后面加上 \nsout 实现换行效果
int n = 1;
System.out.printf("第%s条", n);  //第一条

8.IDEA

8.1 IDEA概述

IDEA 全称 Intellij IDEA, 是用于 Java 语言的集成开发环境,它是目前业界公认的用于 Java 程序开发最好的工具
集成开发环境:把代码编写,编译,执行,调试等多种功能综合到一起的开发工具

8.2 IDEA下载和安装

  1. 下载: IDEA下载
  2. 安装: 一路下一步,默认设置即可(建议修改安装目录)

8.3 IDEA层级结构介绍

这些结构的划分,是为了方便管理类文件

  • project(项目、工程)
    • 淘宝、京东、贴吧属于一个个项目
  • module(模块)
    • 一个项目中存在许多模块,不同模块存放不同模块的业务功能代码,例如论坛模块
  • package(包)
    • 一个模块中还有许多业务,存放在不同的包里,例如发帖、评论
  • class(类)
    • 一个业务中还有很多类,具体写代码实现的地方

8.4 IDEA操作步骤

  1. 创建 project 项目
  2. 创建 module 模块
  3. 创建 class
  4. 创建 package 暂时不需要
    package 一般用企业域名倒写加功能 com.baidu.search 实际是多级目录
  5. 在类中编写代码
  6. 完成编译运行

8.5 IDEA一些好用设置

有些 IDEA 设置十分方便,能使编码效率倍增,但建议新手暂时不要开启,前期多自己敲,待养成良好编程习惯之后开启节省时间

  • 智能提示忽略大小写: Settings -> Editor -> General -> Code Completion -> Match case 取消勾选
  • 自动导包: Settings -> Editor -> General -> Auto Import -> Add unambiguous imports on the fly 和 Optimize imports on the fly (for current project) 勾选
  • 字体: Settings -> Editor -> Font -> 个人喜欢 Consolas 字体
  • 背景: Settings -> Appearance & Behavior -> Appearance -> Background Image… -> 选择自己喜欢的图片,还可以设置透明度

三、运算符

1. 运算符与表达式

1.0 概念

  • 运算符: 对字面量或者变量进行操作的符号
  • 表达式:用运算符把字面量或者变量连接起来符合Java语法的式子

1.1 算术运算符

1)/ 除法

  • 整数相除得到的也是整数(整除的商),如果想要得到精确结果,必须有浮点数参与运算
  • 浮点数直接参与运算,得到的结果可能是不精确的
System.out.println(10 / 3);   //3
System.out.println(10.0 / 3);  //3.3333333333333335

2) % 取模

  • 整数才能取模,得到的是相除的余数
System.out.println(10 % 2);  //0
System.out.println(10 % 3);  //1

3)+ 加法

  • 当 + 操作中出现字符串时,作用是将字符串从左至右依次拼接为一个新字符串
  • 当 + 操作中出现了字符时,会将 char 转换成 ASCⅡ 码表中对应的数字计算
System.out.println(1 + 2 + "abc" + 2 + 1);  //3abc21
System.out.println('a' + 1)  //98

4)- 减法 和 * 乘法

  • 与小学数学一样

5)自增自减运算符

  • ++ 自增运算法:在变量前先加再用,再变量后先用再加
  • -- 自减运算法:在变量前先减再用,再变量后先用再减
int a = 1;
System.out.println(a++);  //输出1,但a已经是2了
a = 1;
System.out.println(++a);  //输出2,a也是2

1.2 赋值运算符

  • = 把等号右边的计算结果赋值给左边的变量
  • += -= /= *= %= 把左边和右边计算的结果赋给左边,底层都隐藏了一个强制类型转换
int a = 0;
double d = 10.0; 
a += d;   //等价于 a = (int)(a + d); 对应的强制类型转换
System.out.println(a);  //结果是10 a是整型
System.out.println(a/3); //结果是3 a是整型

1.3 关系运算符

又叫比较运算符,左边和右边比较进行判断,运算结果一定是 boolean 类型,如果成立就返回 true,如果不成立就返回 false

符号解释
==判断左边跟右边是否相等
!=判断左边跟右边是否不相等
>判断左边是否大于右边
>=判断左边是否大于等于右边
<判断左边是否小于右边
<=判断左边是否小于等于右边

1.4 逻辑运算符

1)逻辑运算符
逻辑运算符两侧的值只能是 boolean 类型

符号名字说明
&逻辑与(且)并且,两边都为true,结果才为true
|逻辑或或者,两边都为false,结果才为false
^逻辑异或相同为false,不同为true
!逻辑非取反

2)短路逻辑运算符 (常用这个)
如果左边能确定整个表达式的结果,右边不执行,提高了代码的执行效率

符号名字说明
&&短路与结果和 & 相同,但具有短路效果
||短路或结果和 | 相同,但具有短路效果
int x = 10, y = 10;  
boolean result = x++ < 1 && y++ < 1;  //短路,右面不执行
System.out.println(result);   //false 结果与 & 一样
System.out.println(x + " " + y);  //11 10
  
x = 10;  y = 10;  
result = x++ < 1 & y++ < 1;  //两边都执行
System.out.println(result); //false 
System.out.println(x + " " + y);  //11 11

1.5 三元运算符

又叫三元表达式或问号冒号表达式,三元运算符的运算结果一定要被使用,要么赋值给变量赋值,要么打印出来,否则语法错误

格式: 关系表达式 ? 表达式1 :表达式2 ;

  • 计算关系表达式的值
  • 如果关系表达式的值为 true,那么执行 表达式1
  • 如果关系表达式的值为 false,那么执行 表达式2

1.6 位运算符

位运算符作用在所有的位上,并且按位运算

符号含义规则
&按位与对应位都是1,则结果为1,否则为0
|按位或对应位都是1,则结果为0,否则为1
>>左移向左移动,低位补0(移动一位相当于乘2)
<<右移向右移动,高位按正负补0或1(移动一位相当于除2)
>>>无符号右移向右移动,不管正负高位都补0,也就是结果都是正数

此外还有按位异或、按位取反

1.7 运算符的优先级

小括号优于一切!!!

2. 类型转换

2.1 隐式类型转换

也叫自动类型提升,赋值给精度更高的类型时,程序自动将低精度提升到高精度
精度从高到低:double > float > long > int > short > byte

两种规则:

  • 低精度和高精度运算时,低精度的先提升为大精度再进行运算
  • byte、short、char三种类型的数据在运算的时候,都会直接先提升为 int 再进行运算

2.2 强制类型转换

如果要把高精度值赋给低精度类型时,需要使用强制类型转换(数据会丢失精度)

// 目标数据类型 变量名 = (目标数据类型)被强转的数据;
double a = 1.111;
int b = (int)a;

四、流程控制语句

1. 顺序结构

顺序结构是程序中最基本最简单的执行流程,按照代码的先后顺序,从上往下执行

2. 分支结构

2.1 if-else 语句

  1. 计算关系表达式 ( 关系表达式的值只能是 boolean 类型的)
  2. 如果关系表达式值为 true 执行 语句体1
  3. 如果关系表达式值为 false 执行 语句体2
  4. 继续顺序执行大括号后面的语句
if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}

if-else 还可以有级联和嵌套

2.2 switch-case 语句

  1. 计算表达式 (取值为 byteshortintcharString枚举
  2. 表达式的值和 case 的值从上至下顺次比较,遇到相同的值就从对应 case 开始执行,直至整个 switch 语句结束或者遇到 breakcase 后的值只能为字面量,不能为变量)
  3. 如果所有 case 的值与 表达式 的值都不匹配,就会执行 default 对应的语句
switch (表达式) {
	case1:
		语句体1;
		break;
	case2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;
}
  • default 可省略,位置可不放在最后 (但不建议)
  • case 下如果没写 break,会出现 case 穿透
  • switch 语句在 jdk12 之后的新特性可简化语法
switch (表达式) {
	case 1 -> {
		语句体1;  //相当于省略了break
	}
	case 2 -> 语句2;  //如果只有一句还可省略括号
	default -> 语句n+1;
}

3. 循环结构

3.1 for 循环

3.1.1 传统 for 循环
  1. 执行初始化语句
  2. 执行条件判断语句
    • 值为 false,跳出循环
    • 值为 true,进入循环
      1. 执行循环体语句
      2. 执行条件控制语句
      3. 回到 2 继续判断
for (初始化语句; 条件判断语句; 条件控制语句) {
	循环体语句;
}
3.1.2 for-each 循环

for-each 循环也称为增强型 for 循环,可以简化对数组的遍历操作。在这种循环中,每次迭代都会将数组中的下一个元素赋值给声明的 迭代变量迭代变量 是一个局部变量,它只是一个在每次迭代中指向数组元素的临时引用,并不影响原始数组的内容

for (数组元素类型 迭代变量 : 数组) { 
}
  1. for-each 循环只能遍历访问数组的元素,而不能用于修改
  2. for-each 循环在循环过程中会自动处理数组越界的情况,因此不需要担心索引越界的问题

3.2 while 循环

初始化语句;
while(条件判断语句){  //小括号里用 true 实现无限循环
	循环体;
	条件控制语句;
}

3.3 do-while 循环

初始化语句;
do{
    循环体;
    条件控制语句;
}while(条件判断语句);

3.4 三种循环的区别和使用

  • forwhile 是先判断再执行循环体
    • 当知道循环次数或循环范围时,常用 for 循环
    • 不知道循环的次数和范围,只知道循环的结束条件时,常用 while 循环
  • do-while 是先执行再判断

3.5 跳转控制语句

1)break

  • 结束整个循环
  • 用于 switch 和循环中

2)continue

  • 结束本次循环,继续执行下次循环
  • 用于循环中

五、数组

1. 数组介绍

数组是一种容器,可以存取多个同种类型的值
存在隐式转换,比如 byteshort 可以存到 int 型的数组中,但建议容器类型和存储的数据类型保持一致

2. 数组的定义和初始化

2.1 数组的定义

//数据类型[] 数组名;
int[] arrary;   //平时习惯性使用这种定义格式
//数据类型 数组名[];
int arrary[];

2.2 数组的初始化

初始化:就是在内存中为数组开辟空间,并将数据存入容器的过程

  • 等号两边的数据类型必须保持一致
  • 数组一旦创建,长度不能发生改变
2.2.1 静态初始化

静态初始化时需要指明每个数组元素,系统根据元素个数计算数组长度

//数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
int[] arrary1 = new int[]{1,2,3};
//new 数据类型[]可省略
int[] arrary1 = {1,2,3};  //平时使用这种
2.2.2 动态初始化

动态初始化时只需指明数组的长度,由系统为数组分配初始值

  • 整数类型:默认初始化值 0
  • 浮点数类型:默认初始化值 0.0
  • 字符类型:默认初始化值 '/u0000' 空格
  • 布尔类型:默认初始化值 false
  • 引用数据类型:默认初始化值 null
    除了四类八种数据类型都是引用数据类型
//数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[3];

3. 数组的元素访问

3.1 数组的地址

直接访问数组名时,得到的是数组的地址值,也就是数组在内存中的位置

int[] arr = {1,2,3};
System.out.println(arr);  //[I@6d03e736
// [表示数组 I表示int @间隔符 6d03e736表示内存地址,是十六进制的
double[] arr2 = {1.1,2.2,3.3};
System.out.println(arr2);  //[D@568db2f2

3.2 访问数组元素

要想访问或修改数组中某位具体的值,需要用到索引
索引:也叫角标、下标,从 0 开始连续不间断
当访问了数组中不存在的索引就会出现索引越界异常,数组的有效索引是 0 到 数组的长度减 1

//数组名[]
int[] arr = {1,2,3};
System.out.println(arr[0]); //输出1
arr[0] = 5;
System.out.println(arr[0]); //输出5

3.3 数组的遍历

访问数组的每一个元素

//数组名.lengh 数组的长度
for(int i = 0; i < arr.lengh; i++) {
	System.out.println(arr[i]); 
}

4. 二维数组

二维数组就是在数组里面存数组,将数组分组管理

4.1 初始化

//静态初始化
int[][] arr1 = new int[][] {{元素1, 元素2...}, {元素1, 元素2...}};
int[][] arr2 = {
	{元素1, 元素2...}, 
	{元素1, 元素2...}
};  //建议使用这种

//动态初始化
int[][] arr3 = new int[m][n];  //m个一维数组,每个一维数组存n个元素

4.2 元素访问

int[][] arr = {
	{1, 2}, 
	{3, 4, 5}
};
System.out.println(arr[0]);  //输出第一个一维数组的地址值
System.out.println(arr[0][1]); //输出2
//遍历
for(int i = 0; i < arr.lengh; i++) { //遍历二维数组得到每个一维数组
	for(int j = 0; j < arr[i].lengh; j++) { //遍历一维数组
		System.out.print(arr[i][j] + " ");
	}
	System.out.println();
}

5. 数组在内存

5.1 Java内存分配

  • 本地方法栈: JVM 在使用操作系统功能时使用,与开发无关
  • 寄存器: 给 CPU 使用,与开发无关
  • 栈: 方法运行时使用的内存,比如 main 方法运行是进入方法栈中执行
  • 堆: 存储对象或数组,new 创建的都存储在堆空间
  • 方法区: 存储可运行的 class 文件
    从 jdk8 开始取消了方法区,新增元空间,原方法区的功能一部分放到堆中,一部分放到元空间中

5.2 数组在内存中的存储

  • 方法进入栈中执行,变量定义在栈中,变量的数据也存储在栈中
  • new 出来的都在堆中开辟空间并产生地址
  • 数组名在栈内存中存储的是堆中数组对应的地址,数组元素实际存储在堆中,通过数组名加索引去访问堆中的数组元素

数组赋值给数组时,实际是将数组的地址赋值,并没有在堆中开辟新的内存

int[] arr1 = {1, 2, 3};  //简写省略了 new
int[] arr2 = arr1;  //没有 new,实际将 arr1 所指的地址赋给了 arr2
arr2[0] = 2;  //arr1 和 arr2 共享一块堆空间
System.out.println(arr1[0]);  //输出 2,对 arr1 的修改也是对 arr2 的修改

5.3 二维数组在内存中的存储

  • 栈内存中存的是二维数组在堆内存中的地址值
  • 堆内存中二维数组存的是每个一维数组的地址值
  • 一维数组中存储的是真正的数据元素

六、方法

1. 方法介绍

方法(method)是程序中最小的执行单元,将一些重复具有独立功能的代码打包到方法中 (相当于 C 语言中的函数)

作用:

  • 提高代码的复用性
  • 提高代码的可维护性

2. 方法的定义和调用

2.1 基本概念

  • 方法定义:把代码打包的过程(创建方法)
  • 方法调用:方法定义之后需要手动使用才会运行(使用方法)
  • 形参:方法定义中的参数
  • 实参:方法调用中的参数

2.2 格式和注意事项

//方法的定义
public static 返回值类型 方法名 (参数1, 参数2...) { 
	方法体...
	return 返回值; 
}
//方法的调用
方法名 (参数1, 参数2...);
  • 参数数据类型 变量名,可以没有,也可以有多个
  • 返回值类型为 void 时,可省略 return,或者只写 return返回值,表示结束方法
  • 返回值类型不为 void 时,返回值返回值类型 必须对应
  • 方法需要先定义才能调用,调用时 形参实参 必须一一对应

3. 方法的重载

同一个类中多个方法名相同参数不同的方法

  • 重载对应方法的定义,与方法的调用无关
  • 重载根据方法名和参数(数量,类型,顺序)进行识别,与返回值无关
public class Demo {
	public static int sum(int a, int b) {
		方法体;
	}
	public static int sum(int a, int b, int c) {
		方法体;
	}
	public static double  sum(double a, double b) {
		方法体;
	}
}

4. 方法在内存

方法运行时使用栈内存,进栈运行,运行完毕就出栈,先进后出

  • 基本数据类型:数据值存储在自己空间中
    • 传参时传递的是真实的数据,形参的改变不会影响实参的值
  • 引用数据类型:数据值存储在其他空间中,自己空间中存储的是地址值
    • 传参时传递的是地址值,通过地址值修改形参会影响实参的值

一、 在方法中声明的变量,即该变量是局部变量
每当程序调用方法时,系统都会为该方法建立一个方法栈,局部变量就存放在方法栈中,当方法结束系统会释放方法栈,该方法中声明的变量随着栈的销毁而销毁,这就是局部变量只能在方法中使用的原因。
在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量
(1)基本类型: 变量名和值(变量名和值是两个概念)存放在方法栈中
(2)引用类型: 所声明的变量(实际存储的是地址值)存放在方法栈中,该变量所指的对象放在堆内存中
二、 在类中声明的成员变量,也叫全局变量
全局变量在堆中存放(所以全局变量不会随着某个方法执行结束而销毁)。
同样在类中声明的变量既可是基本类型的变量,也可以是引用类型的变量
(1)基本类型:变量名及其值都放在堆内存中
(2)引用类型:变量名和值都存在堆中,但变量存储的仍是地址值,该内存地址值指向所引用的对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OG one.Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值