01-Java基础-Java 简介

Java简介

学习java之前需要什么基础?

经常遇到有同学问这个问题,其实只要你会基本的电脑操作(开关机,安装软件等),并且愿意花时间付出,就一定能学会java。有些同学没有学会的原因并不是因为java多么难,而是自己没有用心的付出。知识改变命运,行动改变未来,如果你感兴趣,那就努力去学吧。

java是什么?

java是一门计算机编程语言,人们通过编程语言可以编写出计算机软件。当你掌握了一门编程语言之后,就可以跟计算机进行沟通交流了。就好比是掌握英文之后,可以跟欧美的人进行深入交流。现在大部分行业已经离不开计算机了,因此掌握一门编程语言对于将来的发展还是有一些帮助的。目前市面上很多软件都是使用java编写的,比如淘宝,京东,12306等等。

java主要的应用场景是编写服务器端的程序,什么是服务器端的程序?举例说明,比如你在电脑或手机的淘宝上搜索“篮球鞋”,这个搜索词“篮球鞋”会随着网络传输到淘宝的服务器上(服务器可以简单的认为是一台电脑,他们那边有非常多这样的电脑),在服务器上会有软件程序来管理篮球鞋数据(品牌,价格,简介等等),之后这个软件就会检索然后将结果数据返回到你的电脑或手机上,你就能看到篮球鞋的数据了。服务器端上的这个软件程序就可以使用java来编写。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Wh7Da3b-1689657617658)(D:.java\typora-user-images\image-20230706104615051.png)]

Java语言历史

90年代初,在美国sun公司有一名叫做James Gosling(詹姆斯·高斯林,被称为java之父)的工程师带领着他的团队开发出了一款编程语言,名字叫做“Oak”,之后改名为Java,即Java最初叫做Oak。

1996年1月,sun公司发布了java第一个版本。

2009年,sun公司被Oracle(甲骨文)公司收购,即java现在属于Oracle公司。喜欢篮球的同学可能知道,NBA金州勇士队的主场叫做Oracle Arena(甲骨文中心),这个主场就是Oracle赞助的。

Java语言版本

J2SE 1.1.4		Sparkler	宝石				1997-09-12
J2SE 1.1.5		Pumpkin		南瓜				1997-12-13
J2SE 1.1.6		Abigail		阿比盖尔--女子名		1998-04-24
J2SE 1.1.7		Brutus		布鲁图--古罗马政治家和将军	1998-09-28
J2SE 1.1.8		Chelsea		切尔西--城市名			1999-04-08
J2SE 1.2		Playground	运动场				1998-12-04
J2SE 1.2.1		none		无				1999-03-30
J2SE 1.2.2		Cricket		蟋蟀				1999-07-08
J2SE 1.3		Kestrel		美洲红隼(sǔn)			2000-05-08
J2SE 1.3.1		Ladybird	瓢虫				2001-05-17
J2SE 1.4.0		Merlin		灰背隼				2002-02-13
J2SE 1.4.1		grasshopper	蚱蜢				2002-09-16
J2SE 1.4.2		Mantis		螳螂				2003-06-26
JavaSE 5.0 (1.5.0)	Tiger		老虎	
JavaSE 5.1 (1.5.1)	Dragonfly	蜻蜓	
JavaSE 6.0 (1.6.0)	Mustang		野马
JavaSE 7.0 (1.7.0)	Dolphin		海豚
JavaSE 8.0 (1.8.0)	2014年发布,目前市面上最常用的版本
JavaSE 9.0          2017年9月发布,从次之后每隔半年发布一个新的版本
JavaSE 10
JavaSE 11           LTS长期支持版本
JavaSE 12
JavaSE 13
JavaSE 14
JavaSE 15
JavaSE 16           
JavaSE 17           2021年9月发布  LTS长期支持版本

需要注意里面版本的变化,1.4之前都是1.X开头,从1.5开始,版本号直接命名为5.0,6.0,7.0,在javaSE 8.0之后,Oracle公司宣布每半年发布一个新版本。目前市面上最常用的版本是javaSE 8.0,所以建议大家学习的时候可以使用这个版本。8之后的版本变化不是很大,我会在整个java基础系列的最后分别说下8之后版本的新特性。

下面来介绍一些名词

Java语言平台

  • JavaSE(Java Platform Standard Edition)java标准版

    以前叫做J2SE,5.0版本后改名叫做JAVASE,主要用于桌面应用程序的开发,该技术体系是后两者的基础,可以认为这是Javase基础知识,如果打算以后做Android开发,也需要先学习这部分的知识。

  • JavaME(Java Platform Micro Edition)java小型版

    以前叫做J2ME,后来更名为JAVAME,是为开发电子消费产品和嵌入式设备提供的解决方案。

  • JavaEE(Java Platform Enterprise Edition)java企业版(JakartaEE)

    以前叫做J2EE,后来更名为JAVAEE,是为开发企业环境下的应用程序提供的一套解决方案,主要针对于Web应用程序开发,比如淘宝的服务器端、京东的服务器端、12306服务器端等大部分都是java开发的,这个也是Java开发相关人员主要的工作方向。
    在2018年3月初,Oracle公司将JavaEE移交给开源组织Eclipse基金会管理,因此JavaEE被改名为JakartaEE。

JRE和JDK

  • 什么是JVM?

    JVM(java virtual machine)java虚拟机,我们编写的程序是会由这个虚拟机来执行。

  • 什么是JRE?
    JRE(Java Runtime Environment)即Java运行时环境,主要负责运行Java程序。

  • 什么是JDK?
    JDK(Java Development Kit)即Java开发工具包,主要用来开发Java程序,给Java开发人员使用的。后面我们需要下载一个jdk来安装使用。

JVM,JRE和JDK的关系
Java程序员开发完程序之后需要编译运行,因此JDK包含了JRE,JRE包含了JVM。安装JDK之后,就不用再去特意安装JRE了,JRE中包含了JVM(Java虚拟机)。对于那些只希望运行Java程序的人来说,只需要安装JRE即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCiADWAa-1689657617659)(D:.java\typora-user-images\image-20230706104652875.png)]

Java语言特点

  • 跨平台
    使用Java语言开发的软件程序可以在不修改源码的情况下运行到各大操作系统,例如windows,linux,mac等。比如我在windows系统下开发的程序是可以直接在linux系统上运行的。跨平台原理在后面章节说。
  • 简单性
    相对来说要比C和C++简单一些,学习起来更容易上手。
  • 面向对象
    Java是面向对象的,更有利于学习者以人类的思维方式去理解它。
  • 健壮性
    强类型机制、异常处理、泛型使Java更具有健壮性
  • 安全性
    Java提供了一系列的安全机制来防范恶意代码攻击
  • 开源
    Java语言是开放源代码的,众人拾柴火焰高嘛,每个人都可以为Java技术的发展做出贡献。

JDK的安装和环境变量设置

JDK的下载和安装

目前市面上使用较多的是jdk8,最新的长期支持版是17,我这里使用jdk17的版本了,后面会讲解新版本jdk的一些特性。

注意:下面的安装配置步骤是基于jdk8版本的,jdk17的操作方式是一样的。

可以去oracle官网里面下载JDK:http://www.oracle.com
英文不好的同学可以从这里下载:http://www.monkey1024.com/javatools

网盘的链接里面是有64位的,window电脑系统下载后缀名是exe,mac电脑系统下载后缀名是dmg的,注意选择跟自己电脑匹配的JDK。

下载后直接下一步安装即可(步骤跟安装普通软件一样),安装要注意事项

  • 安装路径中最好不要出现中文、空格或特殊字符
  • 最好不要安装到C盘,我的安装路径:D:\Java\jdk1.8.0_60
  • 当提示安装JRE时可以选择不安装,因为JDK里面包含JRE了。

常用的dos命令

安装好jdk之后,后面会使用一些dos命令,这里先介绍一些常用的命令。按下快捷键win+d,输入cmd,即可打开命令提示符(有的人叫做黑窗口),打开后注意命令提示符中当前默认的路径是在c盘下。下面是命令提示符常用的一些命令:

  • dir 显示当前目录中的子目录和文件
  • cd 切换当前目录
  • cls 清屏
  • tab 自动补全
  • ipconfig 显示网络配置信息
  • 通过向上/向下的箭头, 查看之前使用过的命令

配置环境变量

为了更方便以后执行Java相关命令,需要配置环境变量。右键我的电脑—属性—右侧高级系统设置—环境变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxPF1xBu-1689657617660)(D:.java\typora-user-images\image-20230706104858286.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IAhGAXs9-1689657617660)(D:.java\typora-user-images\image-20230706104929740.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SkQN6htW-1689657617661)(D:.java\typora-user-images\image-20230706104947543.png)]

  1. 在系统变量里面,点击新建,
    变量名填写JAVA_HOME
    变量值填写D:\Java\jdk1.8.0_60
    注意:变量值填写你本地的JDK安装的路径即可,我本地的安装路径是D:\Java\jdk1.8.0_60。其中.0_60是小版本号,跟这里的不一致也没有关系。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRZN3ALh-1689657617661)(D:.java\typora-user-images\image-20230706105007982.png)]
  2. 在系统变量里面,先找下变量名为PATH的选项(如果没有则点击新建,变量名填写PATH),双击PATH打开,点击新建,然后填写%JAVA_HOME%\bin
    写完之后再点击上移,将其移动到最上面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEhZYL5Z-1689657617661)(D:.java\typora-user-images\image-20230706105035352.png)]

环境变量配置完成之后,打开命令提示符(如果之前有开启命令提示符,需要全部关闭重新再打开),快捷键win+r,输入cmd。
在命令提示符里面输入java和javac两个命令,如果出现一堆类似图片中的文字则说明配置成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Z1DIcxV-1689657617662)(D:.java\typora-user-images\image-20230706105059071.png)]

关于CLASSPATH

在早期的jdk中需要配置CLASSPATH,jdk5之后的版本无需再配置了。其作用是告诉jdk从哪里找class文件。如果你一定要配置的话,只需将其值配置为一个点.即可。

另外,如果你的电脑出现配置好环境变量之后重启电脑失效的情况,此时配置CLASSPATH即可解决。该现象比较少见,所以这里就不建议再配置CLASSPATH了。

环境变量中说明

在环境变量的PATH中,我们添加了%JAVA_HOME%\bin,其中的%JAVA_HOME%是一个变量,即会找到我们之前配置的变量名 JAVA_HOME的值,也就是说%JAVA_HOME%起始就是你的jdk的安装路径:D:\Java\jdk1.8.0_60(这是我本地的安装路径),因此%JAVA_HOME%\bin的本质就是D:\Java\jdk1.8.0_60\bin,这样当我们输入java和javac命令的时候,系统就能从D:\Java\jdk1.8.0_60\bin目录下找到,从而显示正确的内容。

将qq配置到环境变量中,找到你电脑上qq的安装路径,将里面的bin目录配置到path中,重启命令提示符之后,输入qq即可直接启动qq。

JDK安装路径下的目录介绍
安装完JDK后,JDK的安装路径下会有一些文件夹,那这些文件夹里面的文件都是做什么的呢?

  • bin目录:该目录用于存放一些可执行程序。
  • include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
  • lib目录:lib是library的缩写,里面存放了 Java 类库或库文件,是开发工具使用的归档包文件。
  • src.zip文件:src.zip为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。

第一个Java程序HelloWorld

Java开发工具介绍

工欲善其事必先利其器,要编写Java程序首先需要一款开发工具软件。主要分为下面三大类

  • notepad(即windows里面的记事本)使用windows自带的记事本就可以写代码,只不过美观度、功能和效率上要远逊于下面的两种,不推荐。

  • vscode,Editplus、sublime text、Notepad++、UltraEdit代码编辑器,编写代码时具有关键字高亮功能,使代码更美观。初学者可以先使用这里面其中一款,有助于初学者理解java程序的编译和运行。

  • IntelliJ IDEA、Eclipse、MyEclipse专业的Java开发集成环境(IDE),界面相比上面的编辑器更加美观,智能化的代码提示,能够有效的提高工作效率,Eclipse免费,MyEclipse和IntelliJ IDEA收费。

初学者可以选择一款代码编辑器进行编辑,等学习深入之后再使用更高级的开发工具进行开发。

可以从代码编辑器的官网上下载,我这里使用的是sublime text

sublime text下载地址:http://www.sublimetext.com/

第一个Java程序HelloWorld

下面我们先体验一个Java程序,目前先不用明白里面每个单词的意义,在后续的学习中会讲到。

新建一个文本文档(最好不要放到c盘),将文件名改成HelloWorld.java,需要注意的是新建文本文档的后缀名是.txt,一定要将这个.txt改成.java,即最终的文件名叫做HelloWorld.java。然后编写下面代码,注意大小写和单词的拼写

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("monkey1024");
        }
    }

编写完成之后,点击保存,打开命令提示符,在命令提示符中进入这个Java文件所在的目录

1.输入javac HelloWorld.java,如果没有提示错误的话,会在这个java文件同目录里面生成一个HelloWorld.class的文件,文件名相同,后缀名不同。

2.在命令提示符里面输入java HelloWorld,就会打印出monkey1024。这样第一个Java程序就完成了。由此可见,这段代码其实就是实现了一个在屏幕中打印文字的功能。

总结:

javac命令后面写的是java源码的文件名,含扩展名.java
java命令后面运行的是编译生成的class文件的文件名,不含扩展名.class

sublime text中文乱码问题

上面的monkey1024如果你写成中文之后,再依次使用javac和java命令,命令提示符中显示的结果可能是乱码,此时需要点击sublime text中的File-》save with encoding-》chinese。然后再依次使用javac和java命令,这样就可以正常打印中文了。

HelloWorld案例常见问题

  • 找不到文件
    • 先检查文件名是否写错了,注意大小写要一致。
    • 检查当前文件的扩展名是不是.java,在命令提示中进入到该java文件所在的目录,输入dir,看看有没有HelloWorld.java.txt的文件,如果有的话,是由于文件扩展名隐藏导致编译失败,修改windows设置,不要隐藏文件名的后缀名,设置好之后再把文件名后缀.txt去掉。
  • 输入javac之后报错
    • 查看单词有没有拼写错误,Java区分大小写,注意大小写问题。
    • 检查是否缺少括号包括()和{}这些都应该是成对出现的。
    • 中英文问题,除了输入中文,其他所有文字和字符都必须是英文字符。

Java程序的运行原理

Java的加载与执行

对于Java程序员来说,主要做的事情就是编写以.java结尾的文件,我们称之为源文件(source file),把在源文件里面所编写的代码叫做源代码(source code)。但是这个.java结尾的文件是不能直接运行的,该文件主要是给程序员看的,java虚拟机看不懂,此时需要使用javac命令将其编译,生成以.class结尾的文件,例如:

javac HelloWorld.java

通过javac命令编译成功之后,就会生成HelloWorld.class文件,这个class文件叫做字节码文件,这些字节码文件是给jvm看的,要想运行这个字节码文件的话,需要使用java命令,例如:

java HelloWorld

这个java命令后面的HelloWorld是要跟HelloWorld.class文件一致,然后java虚拟机中的类装载器会从类路径(默认是当前目录)下的电脑硬盘中寻找这个class文件,然后将其加载到java虚拟机的内存中开始运行,java虚拟机再将class文件中的指令进行翻译后发送给操作系统,操作系统再操作硬件,这样就可以在命令提示符中看到打印效果了。

Java程序的编译:编译期

使用javac命令编译源代码的时期叫做编译期,这个阶段Java的编译器编译对应的java源文件,然后去检查源码里面的语法,如果出现了语法错误会进行提示,这个阶段提示的错误我们称之为编译期错误。如果遇到了编译期错误,是不会生成.class文件的,此时需要我们根据错误提示的信息去分析和解决。

Java程序的运行:运行期

使用java命令运行的时期叫做运行期,这个阶段由类装载器寻找class文件并装载到jvm里面开始运行,这个时期如果出现了错误,我们称之为运行期错误,运行期错误也会出现一些提示信息,我们需要根据这些提示信息去定位并解决问题。

Java程序运行的原理

从初学者的角度来看的话,java程序的执行过程会经历下面几个部分:

  1. 经过javac命令将java源文件编译生成相应的class文件
  2. 使用java命令之后会由jvm中的类装载器将class文件装载到内存中
  3. jvm中的执行引擎负责读取class文件中的指令
  4. 执行引擎将指令发送给OS(operating system,操作系统)
  5. 操作系统再去调用相应的device(设备,例如打印机)

上面程序员主要做的事情就是编写java源代码,其他的jvm和操作系统层面对于初学者来说可以不用关心,如果将来想要深入学习的话,这部分需要学习一下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yrLpY8k-1689657617662)(D:.java\typora-user-images\image-20230706111301199.png)]

Java语言跨平台原理

一次编译,多处运行,是Java的优点之一,那Java是如何实现的呢?在需要运行Java应用程序的操作系统上,先安装一个JVM(安装jdk的时候已经装好了),由JVM来负责Java程序在该系统中的运行,不同的操作系统需要安装不同的JVM,这样我们编写的Java程序只需要跟JVM打交道,JVM再将指令发送到操作系统中执行。

打个比方,比如我要去美国人旅游,要学英语,去日本旅游,要学日语。如果我手里有了一台英语翻译机,我直接跟这个翻译机说中文,它就能翻译出英文,如果是日语翻译机,它就能把中文翻译成日语,我有了这些翻译机,不用再学习外语,就可以跟别的国家的人交流了。这个翻译机就可以理解为JVM,这就是Java能够实现跨平台的原理了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7HpIHKi-1689657617662)(D:.java\typora-user-images\image-20230706111331706.png)]

Java程序的注释和API

什么是注释?

注释是对代码的简要说明,是给程序员看的,注释是出现在Java源代码里面,对源代码进行解释说明。就是在源代码里面用我们熟悉的语言(比如中文)来说明,这样对于程序员来说直接看注释就可以快速的知道某段代码的作用了。注释的内容是不会出现在.class文件里面的,因此JVM是不会执行注释里面的内容的。

注释的作用

注释的作用是提高代码的可读性。一般在开发的时候需要写大量的代码,这时程序的可读性就会低一些,那怎么办呢?我可以通过写一些注释,来解释一下某段代码的作用,可以让别人更快的了解这段代码的作用。所以在编写代码的时候可以适当的写一些注释,这样别人在接手你的代码的时候会很快上手。

Java中注释的分类

  • 单行注释

    使用//来标注,例如:

    public class HelloWorld {
        public static void main(String[] args) {
            //这是一个单行注释,只注释当前行
            System.out.println("HelloWorld");
        }
    }
    
  • 多行注释

    使用/* */来标注,例如:

    public class HelloWorld {
        /*
            这是多行注释
            可以注释多行
        */
        public static void main(String[] args) {
            System.out.println("HelloWorld");
        }
    }
    
  • 文档注释

    通常用于生成Java帮助文档,使用javadoc命令可以将文档注释中内容生成帮助文档。什么是帮助文档?你可以将其理解为说明书。

    使用/** */来标注,例如:

    /**
    * 文档注释
    * 文档注释
    */
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("HelloWorld");
        }
    }
    

    xxxxxxxxxx public static void main(String[] args){        long result = multiply(5);    System.out.println(result);    }​public static long multiply(long n){        if(n==1){        return 1;   }else{        return n * multiply(n-1);   }    }java

文档注释中的内容可以使用javadoc生成单独的帮助文档,这样可以方便一些开发者查阅,在命令提示符中输入下面命令:

javadoc  –d  目标目录  java文件文件名

其中目标目录是你希望文档生成之后存放的目录,例如下面命令会将生成的帮助文档放到当前目录下的mydoc中

javadoc  –d  ./mydoc  HelloWorld.java

执行完上面命令之后,可以看到生成了很多文件,在其中找到index.html,双击可以使用浏览器打开,这个就是帮助文档了。

API应用程序接口

API(Application Programming Interface),中文意思是应用程序编程接口。上面生成的帮助文档的专业名词就叫做API。java官方也有提供API,便于java软件开发者进行查阅,在使用java的时候遇到一些没有见过的内容可以从这里面查找。在后续的学习中会接触到其他技术,这些技术也有提供API,随着学习时间的增长,我们需要掌握API的查询方式。下面是java官方在线的api:

jdk8在线API:https://docs.oracle.com/javase/8/docs/api/

jdk11在线API:https://docs.oracle.com/en/java/javase/11/docs/api/index.html

jdk17在线API:https://docs.oracle.com/en/java/javase/17/docs/api/index.html

java提供的文档

除了api之外java还提供了一些其他相关的文档,以jdk8为例,我们可以在这里找到:https://docs.oracle.com/javase/8/

当你遇到某个具有歧义问题的时候,可以从java的官方文档中看看有没有答案,这里有最严谨,最准确的描述。

HelloWorld代码简单解释

学习完注释之后,我们通过注释来解释一下HelloWorld代码中的内容。以下的代码解释,对于零基础或者底子不好的同学来说可能看不明白,不用着急,暂且先在自己的心里有个概念,随着学习的深入,就会渐渐的明白了。Java语言的学习就是这样,有些当时不懂的知识点,在将来的某一天就会默默的明白了。现在需要做的就是多看,勤练。

//public 代表,全局的含义
//采用 class 来定义类的名称
//HelloWorld 是类的名称,注意类的名称区分大小写

public class HelloWorld {

    //public 代表,全局的含义
    //static, 表示是静态的
    //void, 表示没有返回值
    //main, 入口方法,方法的参数也不能改变
    public static void main(String[] args) {
        //在控制台里面打印一行信息,信息内容是Hello World
        System.out.println("Hello World");
    }
}

Java语言的书写格式

下面内容目前先简单看下即可,后面的内容还会再次说明的。细心的同学可能会发现在编写那个HelloWorld代码的有换行,有缩进。那么可不可以不换行,不缩进的?当然可以,但是想象一下,把这些代码都写在一行里面,看起来是不是特别不爽?这才几行代码而已,以后工作中可能在一个文件里面会遇到成千上万行的代码,如果都写在一行里面,那可读性非常差。程序员编写的代码不仅仅是给自己看的,其他程序员有时候也会看,所以编写的时候要注意一些格式规范

  • 类名(就是上面代码中的HelloWorld)的命名每个单词的首字母要大写;
  • 命名要做到见名知意,最好不要使用aaa,asdf这样的名字;
  • 遇到左大括号要缩进,Tab;
  • 方法和程序块之间加空行让程序看起来清晰;
  • 并排语句之间加空格,例如for语句;
  • 运算符两侧加空格;

HelloWorld代码解释和Java语言的书写格式

HelloWorld代码解释

以下的代码解释,对于零基础或者底子不好的同学来说可能看不明白,不用着急,暂且先在自己的心里有个概念,随着学习的深入,就会渐渐的明白了。Java语言的学习就是这样,有些当时不懂的知识点,在将来的某一天就会默默的明白了。现在需要做的就是多看,勤练。

//public 代表,全局的含义
//采用 class 来定义类的名称
//HelloWorld 是类的名称,注意类的名称区分大小写

public class HelloWorld {

    //public 代表,全局的含义
    //static, 表示是静态的
    //void, 表示没有返回值
    //main, 入口方法,方法的参数也不能改变
    public static void main(String[] args) {
        //在控制台里面打印一行信息,信息内容是Hello World
        System.out.println("Hello World");
    }
}

Java语言的书写格式

细心的同学可能会发现我编写那个HelloWorld代码有换行,右缩进。那么可不可以不换行,不缩进的?当然可以,但是想象一下,把这些代码都写在一行里面,看起来是不是特别不爽?这才几行代码而已,以后工作中可能在一个类里面会遇到成千上万行的代码,如果都写在一行里面,那可读性非常差。程序员编写的代码不仅仅是给JVM看的,也是给其他程序员看的,所以编写的时候要注意一些格式。

  • 大括号要对齐;
  • 命名要做到见名知意,最好不要使用aaa,asdf这样的名字;
  • 遇到左大括号要缩进,Tab;
  • 方法和程序块之间加空行让程序看起来清晰;
  • 并排语句之间加空格,例如for语句;
  • 运算符两侧加空格;

public class和class的区别

public class和class的区别

之前编写的代码中,class叫做类,类的定义有两种方式:

  • public class 类名
  • class 类名

我可以将class前面的public去掉,如果采用public class来声明class,那么java文件的名字必须和类名一致,这是规定,如果不一致,会在使用javac命令编译的时候出现错误信息。我们来把之前的那个HelloWorld.java的文件名修改一下,比如我改成了World.java,然后执行javac命令,可以看到如下报错信息:

World.java:1: 错误:HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明
public class HelloWorld{
        ^
1 个错误

如果把public去掉,直接使用class来声明类,这样java文件的名称不需要和class后面的类名一致,把代码里面的public去掉,文件名依然是World.java,使用javac命令重新编译,可以看到生成了一个新的HelloWorld.class文件,然后运行java HelloWorld,可以看到程序依然可以正常运行。通过这里可以得出一个结论就是,使用javac命令所编译出的class文件的名称跟java的文件名没有关系,class文件的名称是取决于代码中的类名。

class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello World");

    }
}

在一个java文件里面,可以声明多个class,但是只能有一个class前面加public,示例代码(注意大括号的位置):

//定义一个public的类HelloWorld
public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello World");

    }
}

//定义一个类A
class A{
}

//定义一个类B
class B{
}

//定义一个类C
class C{
}

使用javac命令编译后,你会发现代码中的每个class都会生成一个对应的.class文件。一般情况下不会在一个java文件中编写多个class,这样会导致一个java文件过于臃肿,试想打开一个java文件之后发现里面定义了10个class,内心多少是有些崩溃的。在开发中通常会加上public,其作用是表示任何地方都能访问该class,这个具体到后面权限修饰符的时候再细说。

总结:

  • 一个java文件中可以定义多个class,但是最多只能有class前面加public修饰
  • public class后面的类名必须要跟java文件的名字一模一样

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDBW4nuF-1689657617662)(D:.java\typora-user-images\image-20230706111808022.png)]

public static void main(String[] args) {

    System.out.println("Hello World");

}

}

//定义一个类A
class A{
}

//定义一个类B
class B{
}

//定义一个类C
class C{
}


使用javac命令编译后,你会发现代码中的每个class都会生成一个对应的.class文件。一般情况下不会在一个java文件中编写多个class,这样会导致一个java文件过于臃肿,试想打开一个java文件之后发现里面定义了10个class,内心多少是有些崩溃的。在开发中通常会加上public,其作用是表示任何地方都能访问该class,这个具体到后面权限修饰符的时候再细说。

总结:

- 一个java文件中可以定义多个class,但是最多只能有class前面加public修饰
- public class后面的类名必须要跟java文件的名字一模一样

[外链图片转存中...(img-tDBW4nuF-1689657617662)]

生成多个class文件
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值