第一节Java基础

第一章java概述

1.常用的DOS命令(Win+R输入cmd开打)

1.1什么是DOS命令

在DOS命令窗口中才可以输入并执行DOS命令。

在最初的windows计算机中没有图形界面的,只有DOS命令窗口。

也就是说通过执行DOS命令窗口可以完全完成文件的新建、编辑、保存、删除等一系列操作。

1.2新建文件夹

mkdir **

1.3切换盘符或目录

cmd 默认打开的是 C:\Users\用户名 这个目录

  • 切换盘符
    • 直接进入盘符即可:例如:进入d盘 在cmd命令窗口上大 d:回车即可
  • 切换目录
    • 使用cd命令来完成目录的切换:cd是什么含义?change directory(改变目录)
    • cd命令怎么用,语法格式是什么?—cd 路径
    • cd … 回到上一级
    • cd \ 直接回到根路径
    • . 一个点,代表当前路径
  • 路径在windows上也分绝对路径和相对路径
    • 相对路径:相对路径一定是从当前位置作为起点开始找。
    • 绝对路径:在windows操作系统中凡是路径起点是盘符的都是绝对路径

1.4常用的DOS命令

  • cls 清屏
  • dir 查看当前目录下有什么
  • exit 退出DOS命令窗口
  • del 删除一个或者多个文件
    • 删除一个:C:\Users\Administrator>del T1.class
    • 删除多个:C:\Users\Administrator>del *.class
  • 查看个人的IP地址
    • ipconfig(ip地址的配置信息。)
    • ipconfig /all该命令后面添加一个/all参数可以查看更详细的网络信息。
  • 怎么查看两台计算机是否可以正常通信
    • ping命令:
    • 语法: ping IP地址

2java编程语言介绍

2.1什么是Java

Java是1995年美国的Sun公司(Stanford University Network/斯坦福大学网络公司)推出的一门面向对象的高级编程语言

那什么是面向对象呢?

是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某事物在整个解决问题的步骤中的行为。

2.2Java的发展史

  • 1995年Sun公司发布Java1.0版本
  • 1997年发布Java 1.1版本
  • 1998年发布Java 1.2版本
  • 2000年发布Java 1.3版本
  • 2002年发布Java 1.4版本
  • 2004年发布Java 1.5版本
  • 2006年发布Java 1.6版本
  • 2009年Oracle甲骨文公司收购Sun公司,并于2011发布Java 1.7版本
  • 2014年发布Java 1.8版本
  • 2017年发布Java 9.0版本
  • 2018年3月发布Java10.0版本
  • 2018年9月发布Java11版本
  • 2019年3月发布Java12版本
  • 2019年9月发布Java13版本
  • 2020年7月发布Java14版本
  • 2021年1月发布Java15版本

尽管出现了新版本,Java 8仍然是最受欢迎的。它被四分之三的Java开发人员使用。Java 11越来越流行。与去年相比,它的使用率增加了10个百分点。更新的Java 12和Java 13很快就找到了它们的受众。在我们调查的开发者中,有10%或更多的人经常使用它们。

2.3Java的平台

Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发;

  • Java SE(Java Platform,Standard Edition):标准版(基础,要学java,必须先学习SE。基础语法+基础库)
  • Java EE(Java Platform,Enterprise Edition):企业版(专门为企业开发软件,为企业提供解决方案。例如:OA办公系统,保险行业的系统,金融行业的系统,医院系统…)
  • Java ME(Java Platform,Micro Edition):微型版(专门为微型设备做嵌入式开发的。)

3.Java语言的特性

  1. 简单性
    • Java语言的语法简单明了,容易掌握,而且是纯面向对象的语言。Javra 语言的简单性主要体现在以下几个方面:
    • 语法规则和 C++类似。从某种意义上讲,Java 语言是由C和C++语言转变而来的,所以C程序设计人员可以很容易地掌握Java语言的语法。
    • Java语言对C++进行了简化和提高。例如,Java 使用接口取代了多重继承,并取消了指针,因为指针和多重继承通常使程序变得复杂。Java 语言还通过垃圾自动收集,大大简化了程序设计人员的资源释放管理工作。
    • Java提供了丰富的类库、API 文档以及第三方开发包,另外还有大量基于Java的开源项目。JDK (Java开发者工具箱)已经开放源代码,读者可以通过分析项目的源代码,提高自己的编程水平。
  2. 面向对象:
    • 面向对象是Java语言的基础,也是Java语言的重要特性,它本身就是一种纯面向对象的程序设计语言
    • Java提倡万物皆对象,语法中不能在类外面定义单独的数据和函数,也就是说,Java语言最外部的数据型是对象,所有的元素都要通过类和对象来访问。
  3. 健壮性
    • 主要是因为Java中有一种机制:自动垃圾回收机制(GC机制)。
    • java语言是健壮的,相对于C语言来说,C语言没有Java健壮。
    • Java不容易导致内存的泄漏。C++或者C语言使用不当时很容易导致内存泄漏。
  4. java完全/完美支持多线程并发。
  5. 可移植性/跨平台
    • 只要Java语言编写了一次,就可以在各个系统上去运行(Windows、Linux、mac)

4.JVM,JDK,JRE三者的关系

  • JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具;
  • JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需的核心类库;
  • JVM(Java Virtual Machine ):是一款Java虚拟机,模拟Java运行时的一个平台,对内存分配,管理、线程调度等都有一定的管理;

JDK包括JRE,JRE包括JVM。

JVM是不能独立安装的。JRE和JDK都是可以独立安装的。

有单独的JDK安装包。也有单独的JRE安装包。

没有单独的JVM安装包。

安装JDK的时候:JRE就自动安装了,同时JRE内部的JVM也就自动安装了。

安装JRE的时候:JVM也就自动安装了。

问题:
假设你在软件公司开发了一个新的软件,现在要去客户那边给客户把
项目部署一下,把项目跑起来,你需要安装JDK吗?
只需要安装JRE就行了。
JRE体积很小,安装非常便捷快速

5.搭建开发环境并编写第一个java代码

5.1搭建开发环境

  1. 下载JDK,进入官网
    在这里插入图片描述

  2. 下载JDK

    选择版本

在这里插入图片描述

  1. 下载的JDK找一个目录命名为java解压就可以(之前下载过了,所有就使用的 17.0.1的版本)
    在这里插入图片描述

  2. 之后我们需要配置环境变量,"我的电脑"打开属性选项,
    在这里插入图片描述

  3. 之后点击高级系统设置

  4. 之后点击环境变量

  5. 之后 我们要在"系统环境"中,配置java的环境

    • 配置 JAVA_HOME 这个要新建

      • 这个就是你解压JDK的目录 C:\Program Files\java\jdk-17.0.1
      • 在这里插入图片描述
    • 点击选中Path变量,之后点击编辑。配置Path环境变量

      新建之后编写上 “%JAVA_HOME%\bin”

  6. 之后 打开cmd命令窗口 输入java -version 查看java的版本 保证配置成功

5.2编写Java代码

Java开发环境已经搭建完毕,可以开发我们第一个Java程序了。

新建一个HelloJava.java的文件,并且编写代码:

public class HelloJava{
	public static void main(String[] args){
		System.out.println("2022-9-26:Hello Java!!!");
	}
}

注意:文件名要和类名(public class 后面的)保持一致!!

5.3编译Java程序

在DOS命令行中,进入Java源文件的目录,使用javac命令进行编译。

格式如下:

javac Java源文件名.后缀名

示例:

javac HelloWorld.java

编译:

在这里插入图片描述

运行:

java HelloJava(注意这里是不用加后缀名的)

2022-9-26:Hello Java!!!

5.4编译和运行

java程序非常重要的两个阶段:编译阶段和运行阶段

  • 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中, javac 编译器会检查我们

    所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。

  • 运行:是指将 class文件 交给JVM去运行,此时JVM就会去执行我们编写的程序了

到这里第一章的java概述就结束啦

第二章java标识符和关键字

标识符和关键字的定义:计算机处理的对象就是数据,而数据了解标识符和关键字。标识符就是用来标识实体的号,可以用来标识变量名,函数名和对象名等;关键字就是程序发明者规定的有特殊含义的单词,又叫保留字。

标识符

  1. 标识符是用来标识变量、函数、类、模块,或者任何其他用户自定义项 目的名称,用它来命名程序正文中的一些实体,比如函数名、变量名、类名、对象名等。

    类名:public class biaoshifu{} //这里面的biaoshifu就是类名
    方法名:public static void main(String [] args) //这里面的main就是方法名
    变量名:int  a=100;//这里的a就是变量名
    
  2. 命名规则(必须):

    • 标识符只能由数字、字母、下划线、美元符号$组成
    • 标识符不能以数字开头
    • 关键字不能为标识符
    • 关键字是严格区分大小写的
    • 虽然java中的标识符严格区分大小写,但对于类名来说,如果一个java文件中同时出现了A类和a类那么在前就生成谁
  3. 标识符的命名规范(非必须)

    • 规范一:见名之意
    • 规则二:遵循驼峰命名方式(一高一低)–BiaoShiFuTest
    • 规则三:类名、接口名有特殊要求–类名和接口名首字母大写,后面每个单词首字母大写
    • 规则四:变量名、方法名有特殊要求–变量名和方法首字母小写,后面的每个单词首字母小写
    • 规则五:所有常量名全部大写并且单词与单词之间采用下划线衔接

题目:
创建一个123.java文件可以嘛?—是可以的,因为123并不是标识符

在123.java文件中定义一个public类可以嘛?
不可以,因为在public类中,类名和文件名保持一致文件名为123 所以不行

关键字

  1. 什么是关键字?
    • 在SUN公司开发Java语言的时候,提前定义好了一些具有特殊含义的单词,这些单词全部小写,具有特殊含义,不能用作标识符。

关键字都有那些呢(不需要花大量的时间去记)?

public、static、void、class、byte…

第三章变量和数据类型

变量

  1. 什么是变量呢?

    • 变量就是一个存数据盒子。(盒子大小谁来决定啊?数据类型。变量存储什么样的数据?数据类型决定)
      在内存中的最基本的存储单元。
      存数据用的,而且这个数据是可变的,所以叫做变量。
  2. 变量的使用

    • 变量的三要素? 数据类型、变量名、值 (值就是数据,就是字面量。)

      int i = 100;
      
    • java中的变量必须先声明,再赋值才能访问(必须手动赋值。)

      int k; 
      System.out.println(k);// 这样是不行的。
      
    • 可以在一行上声明多个变量:

      int a, b, c = 100;//c变量赋值100,a,b变量只声明了没有赋值。
      int a = 10, b = 20, c = 100;//可以这样每个都赋值。
      
    • 当然声明和赋值也可以分开做

      int i;
      i=100;
      System.out.println(i);//100
      
    • 在"同一个域"中,变量名不可重复,

      • 但可以重新赋值

        {
        	int i=100;
            double i=200.0;//重名了编译器会报错,不允许。
            i = 300; // 可以重新赋值。
        }
        
    • 那到底什么是一个域呢?

      • 目前解释不了,什么是一个域只需要记住一个大括号是一个域

        {A{B{C}
        	}
        }
        A域包括B域,B域包括C域。
        
  3. 变量的分类–根据位置进行分类:记住就行

    • 在方法体当中声明的变量叫做局部变量。

      public static void m1(){
          //局部变量,方法执行结束之后内存释放。
          int k = 100;
      	int i = 200;
      }
      
    • 在方法体外以及类体内声明的变量叫做成员变量。

      public class T{
          // 成员变量
      	int i = 200;
          
      	public static void x(){
      		//局部变量,方法执行结束之后内存释放。
          	int k = 100;
      	}
      	
      }
      
  4. 变量的作用域–出了大括号就不认识了。别的先别管。
    java中有一个重要原则,那个变量离的近 就用那个

    {
    	int i = 100;
    	{
    		在这里可以访问i
    	}
    }
    
    {
    	在这里是无法访问i变量。
    }
    

数据类型

数据类型分为基本数据类型和引用数据类型

基本数据类型(包含类型转换)

数据类型关键字内存占用取值范围
字节型byte1个字节-128~127
短整型short2个字节-32768~32767
整型int(默认)4个字节-2147483648~2147483647
长整型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;

/*
在java中有一条重要的结论:在任何情况下,整数型的字面量/数据默认被当作int类型数据
如果字面量希望被当作long数据类型来处理,需要在字面量后面加上一个L
*/

public static void main(String[] args) {
  //200这个字面量默认当作int类型来处理
  //b变量是long类型,int类型占4个,long类型占8个
  //小容量可以自动转化成大容量,这种操作被称为:自动类型转换
  long b=200;

  System.out.println(b);

  long c=300L;
  System.out.println(c);
	// int i=2147483648;
  //在java中,整数型字面量一上来编译器就会将它看做int
  //而2147483648超出了int范围,所以在没有编译之前就出错
  //报错愿意 操作太大
  //long d=2147483648;
  //解决
  long d=2147483648L;
  System.out.println(d);
}

对于这些基本数据类型有一些转换规则:

  • 第一条:八种基本数据类型中,除 boolean 类型不能转换,剩下七种类型之间都可以进行转换

  • 第二条:如果整数型字面量没有超出 byte,short,char 的取值范围,可以直接将其赋

  • 第三条:小容量向大容量转换称为自动类型转换,容量从小到大的排序为:
    byte < short(char) < int < long < float < double,
    其中 short和 char都占用两个字节,但是char 可以表示更大的正整数;

  • 第四条:大容量转换成小容量,称为强制类型转换,编写时必须添加“强制类型转换符”,
    但运行时可能出现精度损失,谨慎使用;
    强制类型转换规则:数据类型 变量名 = (数据类型)被转数据值;

  • 第五条:byte,short,char 类型混合运算时,先各自转换成 int 类型再做运算;
    byte、short、char->int->long->float->double

  • 第六条:多种数据类型混合运算,各自先转换成容量最大的那一种再做运算;

综合

8种数据类型boolean类型不能转换,其他七种类型之间都可以进行转换

如果整数型字面量没有超出byte short char的取值范围,可以之间将其赋值

小容量向大容量转换称为自动类型转换,容量从小到大的排序为:

byte<short(char)<int<long<float<double其中short和char都占两个字节,但char可以表示更大的正整数。
大容量转小容量称为自动类型转换

byte short char类型混合运算时,各自先转换成int类型(byte+byte也会转换成int类型)

多种数据类型转换运算,各自转换成容量最大的哪一种运算

综合代码示例:

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

//范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为 int ;
public class demo2 {
    public static void main(String[] args) {
        System.out.println("int类型和byte类型进运算");
        // 一个 int 类型和 byte类型 进行相加
        int a = 1;
        byte b = 2;
        //运算结果3,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。
        System.out.println(a + b);
        //byte x=a+b;报错 int类型和byte类型运行,结果是int类型
        int y= a+b;
        System.out.println(y);

        System.out.println("==============================================");
        
        //当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算
        System.out.println("int类型和double类型进运算");
        int p=1;
        double q=1.5;

        //int x=p+q;这样会报错 因为 自动类型转换 运算结果是向范围大的进行转换
        double z=p+q;


    }
}

强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型;比较而言,自动转换是Java自动执行的,而制转换需要我们自己手动执行。

引用数据类型

字符串型String属于引用数据类型。
String字符串不属于基本数据类型范畴。
java中除了基本数据类型之外,剩下的都是引用数据类型。
引用数据类型后期面向对象的时候才会接触。

String类型使用:

public class Demo3 {
    public static void main(String[] args) {

        String str1="hello~";

        String str2="你好啊~";

        String str3="嘿嘿~";

        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }
}

IDEA工具的安装

工欲善其事,必先利其器。要想快速的编写代码,必须有一个好的编译软件,idea下载官网

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。

1.安装idea

我自己用的是idea2021的版本,可以参考IntellIJ IDEA安装和破解手册

2.创建项目和模块

2.1创建项目

  1. 点击Create New Project

  2. 创建一个空的工程
    在这里插入图片描述

2.2创建模块

  • 在弹出的对话框中,点击"+",然后点击New Module创建一个新的模块:

  • 创建一个Java模块
    在这里插入图片描述

  • 选择模块的磁盘路径:
    在这里插入图片描述

  • 目录介绍
    在这里插入图片描述

2.3编写代码

public class demo {
    public static void main(String[] args) { //主方法生成 psvm
        System.out.println("hello world");//输出语句 sout
    }
}

2.4运行代码

在这里插入图片描述

2.5查看控制台

2.6idea项目目录

  • .idea:和我们开发无关,是IDEA工具自己使用的
  • out:目录是存储编译后的.class文件
  • Demo01:模块所在文件夹

在这里插入图片描述

3.idea快捷键和设置

这里只介绍一些常用的快捷键和通用的设置

3.1字体设置

点击菜单栏上的 File->Settings->Editor->Font 修改字体
在这里插入图片描述

3.2idea常用快捷键

快捷键功能
Alt+Enter导入包,自动修正代码
Ctrl+Y删除一行
Ctrl+D快速复制一行
Ctrl+Alt+L格式化代码
Ctrl+/单行注释
Ctrl++Shift+/多行注释
Alt+Shift+上下箭头移动当前代码行
Ctrl+Shift+N快速查询当前项目下的所有文件
Ctrl+N快速查询当前项目的所有类
ctrl+alt+t

有的时候我们要debug,

Step Over F8下一步
Step Into F7 进入到某个方法中
Force Step Into Alt+Shift+F7 强制进入
Step Out Shift+F8 从某个方法中返回
Drop Frame 返回上一个断点
Run to Cursor Alt+F9 跳转到光标所在的这一行

第四章运算符

1.算术运算符

算术运算符
+加法运算,字符串连接运算
-减法运算
*乘法运算
/除法运算
%取模运算,两个数字相除取余数
++、--自增自减运算

2.赋值运算符

赋值运算符,就是将符号右边的值,赋给左边的变量。

赋值运算符
=赋值
+=加后赋值
-=减后赋值
*=减后赋值
/=除后赋值
%=取模后赋值

注意:a=a+b和a+=b有什么区别

+= 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类

型,而a=a+b则不会自动进行类型转换

byte a = 127;
byte b = 127; 
b = a + b; // 报编译错误:cannot convert from int to byte
//正确写法
b += a;

//有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short类型,此时编译器会报错
short s1= 1;
s1 = s1 + 1;

//正确写法:
short s1= 1;
s1 += 1;

3.比较运算符

比较运算符:
==比较符号两边数据是否相等,相等结果是true。
<比较符号左边的数据是否小于右边的数据,如果小于结果是true。
>比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<=比较符号左边的数据是否小于或者等于右边的数据,如果小于或等于结果是true。
>=比较符号左边的数据是否大于或者等于右边的数据,如果小于或等于结果是true。
!=不等于符号 ,如果符号两边的数据不相等,结果是true。

4.逻辑运算符

逻辑运算符,是用来对两个布尔类型进行运算的,运算结果都是布尔值 true 或者 false

运算符运算规则示例结果
&与(有假为假)false&truefalse
``或(有真为真)false|true
^异或(相同为false,不同为true)false^truetrue
!非(取反,true为false,false为trie)!truefalse
&&短路与(和&一样,前面条件为false不执行后面的,效率高)false&&truefalse

5.三元运算符

三元运算符格式:

数据类型 变量名 = 布尔类型表达式 ? 结果1 : 结果2;
  • 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
  • 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。

第五章控制语句

1.选择语句/分支语句

1.1.if

四种写法

  1. if(布尔表达式){
    }
    
  2. if(布尔表达式){
    }else{
    }
    
  3. if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }
    
  4. if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }else if(布尔表达式){
    }else{
    }
    
  5. if语句嵌套:

    if(布尔表达式){ //前提条件
       if(布尔表达式){
          if(布尔表达式){
    
          }else{
    
          }
       }
    }else{
    
    }
    
  6. 执行原理

       对于一个if语句来说,只要有1个分支执行,整个if语句结束。
       当布尔表达式的结果为true时,分支才会执行。
       分支当中只有一条java语句,大括号可以省略。
       带有else的可以保证肯定会有一个分支执行。
    

1.2.switch

完整语法结构:
	switch(){ //值允许是String、int,(byte,short,char可以自动转换int)
	case1: case 值x:
		java语句;
		break;
	case2:
		java语句;
		break;
	case3:
		java语句;
		break;
	default:
		java语句;
	}

2.循环语句

2.1.for循环

for循环语法机制:
	for(初始化表达式;条件表达式;更新表达式){
		循环体;
	}

	for(int i = 0; i < 10; i++){
		System.out.println(i);
	}

for循环执行原理:
1、先执行初始化表达式,并且只执行1次。
2、然后判断条件表达式
3、如果为true,则执行循环体。
4、循环体结束之后,执行更新表达式。
5、继续判断条件,如果条件还是true,继续循环。
6、直到条件为false,循环结束。

2.2while循环

while(布尔表达式){
	循环体;
}
执行次数:0~N次。

2.3.do…while

do{
	循环体;
}while(布尔表达式);

执行次数:1~N次。

3.break

默认情况下,终止离它最近的循环。当然,也可以通过标识符的方式,终止指定的循环。

4.continue

终止当前“本次”循环,直接跳入下一次循环继续执行。

第六章方法

1.方法的概述

是可以完成某个特定功能的并且可以重复利用的代码片段。在C语言中,方法被称为函数。

你定义一个/抽取一个方法出来,而这个方法却无法完成某个特定功能,那么你抽取的这个方法毫无意义。一般一个方法就是一个“功能单元”。假设在以后的开发中,某个功能是可以独立抽取出来的,建议定义为方法,这样以后只需要这个功能,那么直接调用这个方法(函数)即可,而不需要重复编写业务代码。

简单来说Java方法是语句的集合,它们在一起执行一个功能。

方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。

2.方法的使用

2.1 方法的定义

定义格式

[修饰符列表] 返回值类型 方法名(形式参数列表){
    代码块;
    return 返回值;
}

定义格式名词解释:

  • 修饰符: 目前固定写法 publicstatic
  • 返回值类型: 方法运行结果的数据类型,如果该方法没有返回值,那么请声明为void
    • 返回值类型可以是任何类型,只要java中合法的数据类型就行,数据类型包括基本数据类型和引用数据类型。
    • 当一个方法执行结束不返回任何值得时候,返回值得类型也不能空白,必须写上void关键字,所以void表示该方法执行结束不返回任何结果
    • 第四如果返回值类型不是void,那么在方法体结束后,必须使用return返回来返回值,如果没有编译报错
    • 只要有return关键字执行,那么当前方法体结束,如果返回值类型为void 则方法体 中不能有 return 值,
      return; 代表整个方法体的结束.
  • 方法名:满足标识符的规范,用来调用方法。
  • 参数列表:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

举例

public static void methodName(){
    System.out.println("方法定义举例");
}

2.2方法的调用

方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在主方法中,直接写要调用的方法名字就可以调用了

//在方法调用的时候,在同一个类中,类名可以省略
//如果不在同一个类中,类名不能省略
public class MethodTest {
    public static void main(String[] args){

        //那么我们的类名可以省略吗
        daYin1();
        daYin2();
        daYin3();
        //像这种情况下“类名”就不能省略了
        Myclass.daYin1();
        Myclass.daYin2();
        Myclass.daYin3();

    }
    public static void daYin1(){
        System.out.println("hellp world");
    }
    public static void daYin2(){
        System.out.println("hellp world2");
    }
    public static void daYin3(){
        System.out.println("hellp world3");
    }
}

class MyClass{

    public static void daYin1(){
        System.out.println("1");
    }
    public static void daYin2(){
        System.out.println("2");
    }
    public static void daYin3(){
        System.out.println("3");
    }

}

2.3方法的调用的顺序

示例:

public class MethodTest {
    public static void main(String[] args){
        System.out.println("This is main");
        m1();
        System.out.println("main over");
    }
    public static void m1(){
        System.out.println("This is m1");
        m2();
        System.out.println("m1 over");

    }
    public static void m2() {
        System.out.println("This is m2");
        m3();
        System.out.println("m2 over");
    }
    public static void m3(){
        System.out.println("This is m3");
        T.m4();
        System.out.println("m3 over");
}
    class T{
        public static void m4(){
            System.out.println("This is m4");
            System.out.println("m4 over");}

    }
}
/*
 以上代码会输出什么呢?
 	This is main
    This is m1
    This is m2
    This is m3
    This is m4
    m4 over
    m3 over
    m2 over
    m1 over
    main over
*/

JVM(虚拟机)的三大主要内存:栈内存,堆内存,方法区内存

  • 方法区:我个人理解就是存放代码的(存放一些类的信息,静态变量,方法的信息,常量池等)
  • 堆内存:到后面会有详细的解释
  • 栈内存:方法执行的内存空间,以及局部变量
    • 方法调用的时候压栈(入push),方法结束的时候弹栈(出pop)
    • 采用的是先进先出,后进先出的原则

栈的数据结构,采用图的形式

在这里插入图片描述

对上方代码做出解释

  • 程序加载,将一些class字节码文件、方法代码块进行加载

  • 之后找到主程序入口也就是main方法,main方法输出

     System.out.println("This is main");
    
  • 之后调用m1方法,这里注意,调用m1()方法的时候,也就是将m1()方法压栈,main方法后面的代码就会停止运行,就行转到m1()方法执行代码 紧接着m1()方法调用m2()方法。m2()方法压栈,m1()方法后面的代码会停止运行转到m2()… 以此类推,当最后一个方法执行完之后,就会出栈。就会转到之前调用这个方法的方法继续执行没有执行完的代码.。

2.4带参数的

其实在声明方法的时候我们要定义返回值类型和形式参数列表

public class MethodTest {
    public static void main(String[] args) {

        int max = max(20, 18);

        System.out.println("最大值为: "+max);
    }

    public static int max(int num1, int num2) {
        return num1>num2?num1:num2;
    }
}

2.5方法的重载

方法重载的定义和使用

  • 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关(即使修饰符和返回值列表不一样也属于重载)
  • 参数列表不同:个数不同,数据类型不同,顺序不同。

没有用方法重载的弊端

  • //三个方法功能不同,但是相似,分别起了不同的名字
    //第一:代码不够美观
    //第二:程序员需要记忆更多的方法名称,累!!
    public class overrideTest01 {
        public static void main(String[] args) {
            System.out.println(sumint(10,20));
            System.out.println(sumlong(10L,20L));
            System.out.println(sumdouble(10.0,20.0));
        }
        public static int sumint(int x,int y){
            return x+y;
        }
        public static long sumlong(long x,long y){
            return x+y;
        }
        public static double sumdouble(double x,double y){
            return x+y;
        }
    }
    

使用方法重载

  • public class overrideTest02 {
        public static void main(String[] args) {
            //对于程序员来说,只需要记忆一个方法名即可
            System.out.println(sum(10,20));
            System.out.println(sum(10L,20L));
            System.out.println(sum(10.0,20.0));
        }
        public static int sum(int x,int y){
            System.out.println("int的");
            return x+y;
        }
        public static long sum(long x,long y){
            System.out.println("long的");
            return x+y;
        }
        public static double sum(double x,double y){
            System.out.println("double的");
            return x+y;
        }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值