发布时间:2023-03-14 文章分类:电脑基础 投稿人:樱花 字号: 默认 | | 超大 打印

Day1-第1章 Java概述

1.1 计算机语言(了解)

机器语言->汇编语言->高级语言

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWZNISQr-1678323235681)(尚硅谷-Day1-note.assets/image-20230110163026044.png)]

1.2 Java语言概述

1、发展历史(了解)

Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。

Java之父是詹姆斯.高斯林(James Gosling)

Java大约26岁,我们使用的版本是Java8,最新版本Java19,最新的长期支持版本(可以用于开发的版本)是Java17.

发行版本 发行时间 备注
Java 1995.05.23 Sun(Stanford University Network)公司在Sun world会议上正式发布Java和HotJava浏览器
Java 1.0 1996.01.23 Sun公司发布了Java的第一个开发工具包
Java 1.1 1997.02.19
Java 1.2 1998.12.08 拆分成:J2SE(标准版)、J2EE(企业版)、J2ME(小型版)
Java 1.3 2000.05.08
Java1.4 2004.02.06
Java 5.0 2004.09.30 ①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaME
Java 6.0 2006.12.11 2009.04.20 Oracle宣布收购SUN公司
Java 7.0 2011.07.02
Java 8.0 2014.03.18
Java 9.0 2017.09.22 ①每半年更新一次(3月、9月);②Java 9.0开始不再支持windows 32位系统
Java 10.0 2018.03.21
Java 11.0 2018.09.25 JDK安装包取消独立JRE安装包,长期支持版本
Java12-16 每半年更新一次
Java17.0 2021.9 最新的长期支持版本
Java18.0 2022.3
Java19.0 2022.9

2、Java特点(了解)

(1)优点

(2)缺点

3、Java技术体系平台(了解)

1.3 Java跨平台原理(了解)

1、Java语言跨平台原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4vjfudj-1678323235684)(尚硅谷-Day1-note.assets/image-20230202131917024.png)]

下载和安装不同平台对应的JVM

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3Jkqaka-1678323235685)(尚硅谷-Day1-note.assets/image-20230202131929084.png)]

2、JVM、JRE、JDK的关系

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

我们想要开发一个全新的Java程序,那么必须安装JDK ,其内部包含JRE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzos4tRa-1678323235686)(尚硅谷-Day1-note.assets/JDKJRE.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HuO2BwyE-1678323235686)(尚硅谷-Day1-note.assets/JDKJREJVM.png)]

1.4 开发环境搭建(掌握)

1.4.1 JDK的下载

官网网址:www.oracle.com,JDK下载地址:https://www.oracle.com/java/technologies/downloads/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgIeiGeV-1678323235687)(尚硅谷-Day1-note.assets/image-20230202130959166.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLk79Fqp-1678323235688)(尚硅谷-Day1-note.assets/image-20211019111252989.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qIWWv1Sh-1678323235689)(尚硅谷-Day1-note.assets/image-20211019111922387.png)]

1.4.2 JDK的安装

1.4.3 配置环境变量

1、为什么配置path?

希望在命令行使用javac.exe等工具时,任意目录下都可以找到这个工具所在的目录。

例如:我们在C:\Users\Irene目录下使用java命令,结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fKu7tDIU-1678323235694)(尚硅谷-Day1-note.assets/1572317249341.png)]

我们在JDK的安装目录的bin目录下使用java命令,结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-klooyw3v-1678323235695)(尚硅谷-Day1-note.assets/1572317330332.png)]

我们不可能每次使用java.exe,javac.exe等工具的时候都进入到JDK的安装目录下,太麻烦了。我们希望在任意目录下都可以使用JDK的bin目录的开发工具,因此我们需要告诉操作系统去哪里找这些开发工具,这就需要配置path环境变量。

2、设置JDK环境变量的步骤

1.5 入门程序HelloWorld(掌握)

1.5.1 HelloWorld案例

1、程序开发步骤说明

JDK安装完毕,可以开发我们第一个Java程序了。

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZyyCam6S-1678323235701)(尚硅谷-Day1-note.assets/开发步骤.jpg)]

2、编写Java源程序保存.java源文件

  1. D:\atguigu\javaee\JavaSE20190624\code\day01_code 目录下新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为HelloWorld,后缀名必须为==.java==。

  2. 用notepad++等文本编辑器打开(虽然是系统自带的记事本也可以,但是记事本没有关键字颜色标识,不利于初学者学习)

  3. 在文件中输入如下代码,并且保存

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

友情提示:

每个字母和符号必须与示例代码一模一样。

第一个HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的Java源文件 编译成JVM可以看懂的字节码文件 ,也就是==.class==文件。

3、编译Java源文件生成.class字节码文件

在DOS命令行中,进入D:\atguigu\javaee\JavaSE20190624\code\day01_code目录,使用javac 命令进行编译。

方式一:使用文件资源管理器打开D:\atguigu\javaee\JavaSE20190624\code\day01_code目录,然后在地址栏输入cmd。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7FAlctKC-1678323235702)(尚硅谷-Day1-note.assets/image-20211217110132270.png)]

方式二:在notepad++软件的文件菜单–>打开所在文件夹–>命令行(要求notepad++软件必须是用管理员权限启动的,否则会出现已经正确配置了环境变量,却仍然找不到javac命令的问题)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ji5bK8DJ-1678323235704)(尚硅谷-Day1-note.assets/image-20211217110203579.png)]

命令:

javac Java源文件名.后缀名

举例:

javac HelloWorld.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PDWntmr-1678323235704)(尚硅谷-Day1-note.assets/HelloWorld编译结果.png)]

编译成功后,命令行没有任何提示。打开D:\atguigu\javaee\JavaSE20190624\code\day01_code目录,发现产生了一个新的文件 HelloWorld.class,该文件就是编译后的文件,是Java的可运行文件,称为字节码文件,有了字节码文件,就可以运行程序了。

Java源文件的编译工具javac.exe

4、运行Java程序

在DOS命令行中,在字节码文件目录下,使用java 命令进行运行。

命令:

java 主类名字

主类是指包含main方法的类,main方法是Java程序的入口,没有main方法,Java类无法独立运行:

public static void main(String[] args){
}

举例:

java HelloWorld

友情提示:

java HelloWord 不要写 不要写 不要写 .class,也不要写.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d97mOXUg-1678323235705)(尚硅谷-Day1-note.assets/HelloWorld运行结果.png)]

Java字节码文件的运行工具:java.exe

1.5.2 练习案例

案例:新建类AtGuiGuDemo,输出atguigu。

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

1.5.3 初学者常见错误

1、单词拼写问题

例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NgJ2pjF8-1678323235706)(尚硅谷-Day1-note.assets/image-20220908154610246.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0RXgYFU-1678323235706)(尚硅谷-Day1-note.assets/image-20220908154759027.png)]

2、标点符号使用问题

例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7AGEXOr8-1678323235707)(尚硅谷-Day1-note.assets/image-20220908154853639.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avju4oZg-1678323235708)(尚硅谷-Day1-note.assets/image-20220908154925963.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZtZhgTfQ-1678323235709)(尚硅谷-Day1-note.assets/image-20220908154950155.png)]

3、源文件名、类名、字节码文件名的区别和联系?

(1)源文件名、类名、字节码文件名的认识

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uw8B7nuy-1678323235710)(尚硅谷-Day1-note.assets/image-20220908160917774.png)]

(2)源文件名是否必须与类名一致?

如果这个类不是public,那么源文件名可以和类名不一致。但是不便于代码维护。不推荐这么干。
我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。

(3)类名和字节码文件名一致?

字节码文件名就是类名

(4)一个源文件中是否可以有多个类?

一个源文件中可以有多个类,编译后会生成多个.class字节码文件。

4、public的类

(1)class前面可以加public

如果这个类是public,那么要求源文件名必须与类名一致。否则编译报错。
因此一个源文件只能有一个public的类。

(2)main方法必须在public的类中吗?

不是。
但是后面写代码时,基本上main方法(主方法)习惯上都在public类中。

5、文件名大小写问题

(1)程序代码中代码、类名等

严格区分大小写

(2)字节码文件名

因为字节码文件名就是类名,所以严格区分大小写
java命令 主类名/字节码文件名

(3)源文件名

在Windows操作系统中.java的源文件名不区分大小写,但是考虑到需要培养程序员严谨的工作态度,我们建议大家养成区分大小写的习惯。
javac命令 源文件名.java

6、字符编码问题

当cmd命令行窗口的字符编码与.java源文件的字符编码不一致,如何解决?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NPpUxks-1678323235710)(尚硅谷-Day1-note.assets/命令行编译乱码.png)]

解决方案一:

在Notepad++等编辑器中,修改源文件的字符编码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHWkZOgl-1678323235711)(尚硅谷-Day1-note.assets/Notepad修改源文件字符编码.png)]

解决方案二:

在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 Review01.java

7、Java程序的结构与格式

{
    方法{
        语句;
    }
}

格式:

(1)每一级{}缩进一个Tab键

(2)习惯{}的左半部分在行尾,右半部分单独一行,与和它成对的"{"的行首对齐

Day1-第2章 Java基础语法(下午)

2.1 注释(comment)(掌握)

注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。

Java中有单行注释多行注释文档注释

1、单行注释

单行注释以 //开头,以换行结束,格式如下:

// 单行注释内容

2、多行注释

多行注释以 /*开头,以*/结束,格式如下:

/*
	多行注释内容
 */

3、文档注释(也可以放到面向对象部分讲)

文档注释以/**开头,以*/结束。

辅助最终会借助javadoc工具生成API文档,所以文档注释内容会借助一下特有的标记帮助,还会。

/**
	文档注释内容
*/

文档注释的作用有两个:一个是辅助阅读源码的人员(包括代码的设计者、使用代码的开发人员、后期代码的维护人员等)快速地理解代码,另一个是使用javadoc工具生成API文档,这就使得开发人员在不打开源代码的情况下也能快速地了解源码。为了javadoc工具能正确解析文档注释,更好地生成API文档,文档注释必须按照规范的格式进行编写,通常还会借助一些特殊的标记来进行说明。例如:

例如:

/**
文档注释演示
@author chai
*/
public class Comments{
	/**
	Java程序的入口
	@param String[] args main方法的命令参数
	*/
    public static void main(String[] args){
        System.out.println("hello");
    }
}

javadoc工具的使用格式:

javadoc [options] [packagenames] [sourcefiles] [@files]

例如:

javadoc -author -d doc Comments.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KPpnVWs-1678323235712)(尚硅谷-Day1-note.assets/image-20211226163731907.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wlXlJtwT-1678323235713)(尚硅谷-Day1-note.assets/image-20211226163802649.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDvOy6E9-1678323235713)(尚硅谷-Day1-note.assets/image-20211226163949641.png)]

2.2 关键字(keyword)(掌握)

关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。

关键字的特点:全部都是小写字母。

HelloWorld案例中,出现的关键字有 publicclassstaticvoid等,这些单词已经被Java定义好。
关键字比较多,不需要今天一口气全记住,学到哪里记到哪里即可。
Java8关键字一共50个,其中constgoto是保留字。
true,false,null看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pn99yDJX-1678323235714)(尚硅谷-Day1-note.assets/关键字表.png)]

Java17关键字有51个,其中constgoto、_是保留字。
strictfp是已经废弃的关键字。
true,false,null是字面常量值。
另外有16个上下文关键字,它们只在特定的位置才是关键字,否则它们就是标识符。例如:
    exportsopensrequiresuses
    modulepermitssealedvar
    non-sealedprovidestowith
    openrecordtransitiveyield

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8ghaVWz-1678323235715)(尚硅谷-Day1-note.assets/image-20221111133342187.png)]

2.3 标识符( identifier)(掌握)

简单的说,凡是程序员自己命名的部分都可以称为标识符。

即给类、变量、方法、包等命名的字符序列,称为标识符。

更多细节详见《代码整洁之道.pdf》《阿里的Java开发手册》

2.3.1 标识符的命名规则

标识符的命名规则:必须遵守的硬性规则

(1)Java的标识符只能使用26个英文字母大小写,0-9的数字,下划线_,美元符号$

(2)不能使用Java的关键字(包含保留字)和特殊值

(3)数字不能开头

(4)不能包含空格

(5)严格区分大小写

2.3.2 标识符的命名规范

标识符的命名规范:建议遵守的软性规则,否则容易被鄙视和淘汰

(1)见名知意

(2)类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,

例如:HelloWorld,String,System等

(3)变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,

例如:age,name,bookName,main

(4)包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,

例如:java.lang;

自己命名的包不能以java开头,习惯上以公司域名倒置的写法,例如:com.atguigu.bean;

(5)常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,

例如:MAX_VALUE,PI

2.4 初识数据类型(data type)(掌握)

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BktV1Y88-1678323235715)(尚硅谷-Day1-note.assets/image-20210628142322228.png)]

2.5 常量值(literal value)(掌握)

常量值:用于表示在编译时就可以确定的数据值,并且在程序执行的过程中其值不可以发生改变

例如:整数最大值:9223372036854775807,
     圆周率pi的值:3.14159265358979323846,
     自然底数e的值:2.7182818284590452354,
     《三国演义》的作者:罗贯中
    李清照的性别:女

常量值的分类和表示:

类型 举例
整数常量值 12,-23, 1567844444557L
浮点常量值 12.34F,12.34,12D
字符常量值 ‘a’,‘0’,‘尚’
布尔常量值 true,false
字符串常量值 “HelloWorld”、“”
引用数据类型空值常量值 null
public class ConstantDemo {
	public static void main(String[] args) {		
		//输出整数常量值
		System.out.println(12);
		System.out.println(-23);
        System.out.println(235265954566L);
		//输出小数常量值
        System.out.println(12.34F);
		System.out.println(12.34);
        System.out.println(12D);
		//输出字符常量值
		System.out.println('a');
		System.out.println('0');
        System.out.println('尚');
		//输出布尔常量值
		System.out.println(true);
		System.out.println(false);
        //输出字符串常量值
		System.out.println("HelloWorld");
        System.out.println("");
        //输出空值常量值
		System.out.println(null);
	}
}

2.6 变量(variable)(掌握)

2.6.1 变量的概念

变量:用来表示可以在程序执行的过程中才能确定的数据值,或者在程序执行期间可以修改的数据值

变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EEeHV4Y3-1678323235716)(尚硅谷-Day1-note.assets/image-20230202164552516.png)]

2.6.2 变量的声明

数据类型  变量名;
例如:
//存储一个整数类型的年龄
int age; 
//存储一个小数类型的体重
double weight;
//存储一个单字符类型的性别 
char gender;
//存储一个布尔类型的婚姻状态
boolean marry;
//存储一个字符串类型的姓名
String name;
//声明多个同类型的变量
int a,b,c; //表示a,b,c三个变量都是int类型。

注意:变量的数据类型可以是基本数据类型,也可以是引用数据类型。

2.6.3 变量的赋值

给变量赋值,就是把“值”存到该变量代表的内存空间中。

1、变量赋值的语法格式

变量名 =;

2、可以使用合适类型的常量值给变量赋值

int age = 18;
double weight = 44.4;
char gender = '女';
boolean marry = true;
String name = "柴林燕";

long类型:如果赋值的常量整数超过int范围,那么需要在数字后面加L。

float类型:如果赋值为常量小数,那么需要在小数后面加F。

char类型:使用单引号’’

String类型:使用双引号""

3、可以使用其他变量或者表达式给变量赋值

int m = 1;
int n = m;
int x = 1;
int y = 2;
int z = 2 * x + y;

2.6.4 变量值的输出

//输出变量的值
System.out.println(age);
//输出变量的值
System.out.println("年龄:" + age);
System.out.println("age:" + age);
System.out.println("name" + name + ",age = " + age + ",gender = " + gender + ",weight = " + weight + ",marry = " + marry);

()中填写的是要输出的某个值。

如果某些内容想要原样输出,就用"“引起来,而要输出变量中的内容,则不要把变量名用”"引起来

+的左右两边有""表示的字符串的话,意义是拼接多项内容为一个值。

2.6.5 变量可以反复赋值

//先声明,后初始化
char gender;
gender = '女';
//声明的同时初始化
int age = 18;
System.out.println("age = " + age);///age = 18
//给变量重新赋值,修改age变量的值
age = 19;
System.out.println("age = " + age);//age = 19

2.6.6 变量的三要素

1、数据类型

2、变量名

3、值

2.6.7 变量的使用应该注意什么?

1、先声明后使用

如果没有声明,会报“找不到符号”错误

2、在使用之前必须初始化

如果没有初始化,会报“未初始化”错误

3、变量有作用域

如果超过作用域,也会报“找不到符号”错误

4、在同一个作用域中不能重名

5、变量值的类型必须与变量声明的类型一致或兼容(<=)

一致:一样
int age = 18;  18int类型的常量值,age也是int类型
兼容:可以装的下,=右边的值要 小于等于 =左边的变量类型
long bigNum =18; 18int类型的常量值,bigNum是long类型
int < long
int age = 18L; 错误  18Llong类型的常量值,age是int类型
long > int

2.6.8 变量的使用案例

案例需求:随机产生一个[0,1)的小数,用它表示某个圆的半径,然后输出圆的面积和周长的值。

开发提示:

class TestCircle {
    public static void main(String[] args) {
        double radius = Math.random();
        double area = 3.14159265358979323846 * radius * radius;
        double perimeter = 2 * 3.14159265358979323846 * radius;
        System.out.println("本次圆半径值是:" + radius);
        System.out.println("面积是:" + area);
        System.out.println("周长是:" + perimeter);
    }
}

2.7 最终变量/常量(final)

最终变量习惯上也称为常量,因为它是通过在声明变量的数据类型前面加final的方式实现的,所以叫最终变量。加final修饰后,这个变量的值就不能修改了,一开始赋值多少,就是多少,所以此时的变量名通常称为常量名。常量名通常所有字母都大写,每一个单词之间使用下划线分割,从命名上和变量名区分开来。

这样做的好处:

案例需求:随机产生两个[0,1)的小数,分别用它表示两个圆的半径,然后输出对应圆的面积和周长的值。

开发提示:

class TestNoFinal {
    public static void main(String[] args) {
        double radius1 = Math.random();
        double area1 = 3.14159265358979323846 * radius1 * radius1;
        double perimeter1 = 2 * 3.14159265358979323846 * radius1;
        System.out.println("第1个圆半径值是:" + radius1);
        System.out.println("第1个圆面积是:" + area1);
        System.out.println("第1个圆周长是:" + perimeter1);
        double radius2 = Math.random();
        double area2 = 3.14159265358979323846 * radius2 * radius2;
        double perimeter2 = 2 * 3.14159265358979323846 * radius2;
        System.out.println("第2个圆半径值是:" + radius2);
        System.out.println("第2个圆面积是:" + area2);
        System.out.println("第2个圆周长是:" + perimeter2);
    }
}
public class TestUseFinal {
    public static void main(String[] args) {
//        final double PI = 3.14159265358979323846;
        final double PI = 3.14;
        double radius1 = Math.random();
        double area1 =  PI * radius1 * radius1;
        double perimeter1 = 2 * PI * radius1;
        System.out.println("第1个圆半径值是:" + radius1);
        System.out.println("第1个圆面积是:" + area1);
        System.out.println("第1个圆周长是:" + perimeter1);
        double radius2 = Math.random();
        double area2 = PI * radius2 * radius2;
        double perimeter2 = 2 * PI * radius2;
        System.out.println("第2个圆半径值是:" + radius2);
        System.out.println("第2个圆面积是:" + area2);
        System.out.println("第2个圆周长是:" + perimeter2);
    }
}