Java基础环境搭建&入门案例
1、软件
1.1、软件概念
由一些数据和指令组成的程序。大白话:将数据和程序组合在一起。最终形成可以被使用的程序称为软件。
1.2、软件分类
应用软件:可以提供某些领域的功能或者应用。例如:QQ、微信、绝地求生等。
系统软件:提供底层服务的,一般需要安装硬件上。比如:windows、mac、Linux、IOS、安卓等。
2、软件制作
2.1、编程语言
C、C++、C#、Java、Python、Go等等。
2.2、软件开发
将人的思维,通过编程语言最终写成软件。最后还是给人用。
2.3、企业软件开发
2.4、软件架构
C/S:Client、Server
开发阶段:需要开发两套软件:一个是给用户使用的软件。一个是给甲方公司使用的软件。
使用阶段:用户需要安装软件,甲方也需要安装软件。
B/S:Browser、Server
开发阶段:只开发服务器中需要运行的程序。用户直接使用浏览器通过网络就能够访问服务器中的数据。
使用阶段:用户通过浏览器访问程序。
Java语言可以开发CS架构的,也可以开发BS架构的。Java语言重要牛逼在BS架构上。
3、Java语言介绍
3.1、Java的历史
Java语言在1995年的3月23日诞生于美国SUN(Stanford University Network 斯坦福大学校园)公司。Java的诞生标志着互联网时代的开始。至今已经历11个版本的发展。后期我们上课使用的版本为9.0。2009年4月20日 19 点 40 分 美国数据软件巨头甲骨文公司(Oracle)宣布以74亿美元收购Sun公司。
3.2、Java技术架构
J2EE(Java 2 Platform Enterprise Edition)企业版 |
可帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0、3.0 应用程序。 |
J2SEJava 2 Platform Standard Edition)标准版 |
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序,能为Java EE提供开发基础。比如Java版的扫雷。 |
J2ME(Java 2 Platform Micro Edition)小型版 |
用来开发移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)。现在使用的越少用了,Android会逐渐的取代J2ME的市场份额。 |
Java5.0版本后,更名为 JAVAEE JAVASE JAVAME |
3.3、Java跨平台
跨平台就是说同一个软件可以在不同的操作系统上执行,而不需要对软件做任何处理。即通过Java语言编写的应用程序在不同的系统平台上都可以运行。
Java程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层平台(操作系统)上,而是运行在事先准备好自己的Java平台。这个平台就是Java的环境。
4、开发环境
4.1、什么是开发环境
不管是在实际开发软件,还是学习软件开发,都需要在本地(自己)的计算机上搭建可以书写代码和运行代码的场景,这个场景就是所谓的开发环境。
4.2、搭建Java开发环境
不同的开发语言,需要不同的环境支持。需要到相对应的官网下载相关的安装软件。
Java语言环境的下载:使用浏览器访问:www.oracle.com
将鼠标移动到Menu菜单上:
最后会跳转到https://www.oracle.com/technetwork/java/javase/overview/index.html页面
4.3、JDK和JRE介绍
在下载环境的过程中,发现有JDK和JRE的区分:
JDK介绍 | JRE介绍 | JVM介绍 |
JDK(Java Development Kit Java开发工具包):JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。 | JRE(Java Runtime Environment Java运行环境):包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。 | JVM:Java Virtual Mechinal(JAVA虚拟机)。它是JRE里面的一部分,是真正运行Java程序的容器。不管是安装了JDK还是JRE的电脑就会包含JVM。 |
4.4、下载JDK
根据上面的介绍,根据自己的实际需求下载对应的软件。大家既然是学习开发,那么就应该下载JDK。
点击下载JDK,进入http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html页面。
当然现在的最新版本已经是JDK14了,大家安装的时候建议最低版本为8.
点击按钮,一定要accept哦
选择适合自己系统的JDK,开始下载。
等待下载完成,进行安装。
4.5、JDK的安装
双击下载的安装包:
选择下一步,更改安装路径(建议不要安装在默认的目录,最好安装在没有空格和中文的目录下)
选择下一步,开始安装
4.6、JDK的测试
打开windows的命令行工具(也就是黑窗口),按下windows键与R键,打开
输入cmd命令
确定,即可启动命令行工具。
将命令工具的路径切换到JDK的安装目录的bin目录下:输入java,按下回车
输入javac,按下回车
4.7、配置path环境变量
关于操作系统中的path:如果我们想直接去运行某个不在当前目录下的程序,必须将这个程序所在的目录配置到系统的path中。
软件的运行有两种方式:
- 图形化界面方式:双击xxx.exe,之后会出现界面,等着后续操作。
- 命令行方式:这类程序必须使用操作系统的命令行来运行。
环境变量path:如果每次为了运行java,javac等命令都将目录切换到到安装的bin目录下,那会十分的麻烦,于是可以利用windows(Linux系统)中已经存在的path变量,将需要运行的任何可以执行程序的路径配置到其中,这样就可以在任何目录运行配置的程序了。右击我们的电脑,选择属性:
选择高级系统设置
选择【高级】中的【环境变量】
选择【系统变量】中的path
选择path,将安装的JDK路径配置到path中,然后在最后添加一个分号(注意是英文下的分号,一定要注意符号)
最后选择确定,即可配置完成。打开dos窗口,进行测试。
5、书写Java程序
5.1、开发工具介绍
作为一名软件开发人员,我们在开发软件的时候,都会选择合适的编辑器进行软件代码编写。用于编写代码的编辑器就是所谓的开发工具。Java开发常用的开发工具:
普通的记事本、editplus、notepad++、eclipse、myeclipse、STS、NetBeans、IDEA等。
这些开发工具,统称为IDE(集成开发环境)。
5.2、使用notepad++写程序
新建记事本文件
将扩展名修改为.java,文件名可以任意写。
5.3、打开文件,编写代码
编写完代码之后,记得保存( ctrl + s )。
5.4、编译运行程序
使用javac 命令编译书写的Java代码
编译之后会在当前目录下生成对应的.class文件。
使用java命令运行程序
5.5、练习
使用输出语句,在dos窗口显示下图效果:
class Demo
{
public static void main(String[] args)
{
System.out.println("************************");
System.out.println("* *");
System.out.println("* *");
System.out.println("* 欢迎访问学生管理系统 *");
System.out.println("* *");
System.out.println("* *");
System.out.println("************************");
System.out.println("请输入您要操作的类型:");
System.out.println("A 添加学生:");
System.out.println("B 删除学生:");
System.out.println("C 修改学生:");
System.out.println("D 查询学生:");
System.out.println("E 退出系统:");
}
}
5.6、常见错误
大小写问题:
6、Java的语法
6.1、main方法作用
main方法是Java程序的入口;保证程序的独立运行;被JVM调用。并且程序中只能有一个main方法,格式固定不能更改。
注:代码严格区分大小写,如main 和 Main 是不一样的;
6.2、注释
注释:用于解释说明程序的文字就是注释。有利于提高了代码的阅读性。但它不是程序必须的,在开发中要求必须写注释。
注释分类:
1)单行注释 //:
//后到本行结束的所有字符会被编译器忽略;
2)多行注释 /* */:
/* */之间的所有字符会被编译器忽略
3)文档注释 /** */:
在/** */之间的所有字符会被编译器忽略,java特有的(用于生成文档);
注意:多行和文档注释都不能嵌套使用。
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
注释是一个程序员必须要具有的良好编程习惯。初学者编写程序可以养成习惯:先写注释再写代码。将自己的思想通过注释先整理出来,在用代码去体现。
// 讲解:JAVA中的注释
/*
什么是注释:
JAVA中的注释主要作用就是对程序的代码进行解释说明
帮助他人快速的读懂当前代码的功能
注释的格式:三种
单行注释、多行注释、文档注释
*/
/**
文档注释
*/
/* 下面的程序仅仅在一个演示 */
class Demo2
{
/*
main方法是给JVM(JAVA虚拟机)使用的
在程序启动的时候,JVM会自动找格式固定的main方法
*/
public static void main(String[] args)
{
// 下面仅仅是在dos窗口中显示括号中的数据
System.out.println("打印数据");
}
}
6.3、关键字
关键字:被Java语言赋予了特定含义的一些字符, 这些字符被称为关键字。关键字中所有字母都为小写。
好比汉字中的专有名词,例如:中国、北京、陕西等。一般我们不能将这些词用在其他地方,改变其含义。
用于定义数据类型的关键字 | ||||
class | interface | byte | short | int |
long | float | double | char | boolean |
void |
|
|
|
|
用于定义数据类型值的关键字 | ||||
true | false | null |
|
|
用于定义流程控制的关键字 | ||||
if | else | switch | case | default |
while | do | for | break | continue |
return |
|
|
|
|
用于定义访问权限修饰符的关键字 | ||||
private | protected | public |
|
|
用于定义类,函数,变量修饰符的关键字 | ||||
abstract | final | static | synchronized |
|
用于定义类与类之间关系的关键字 | ||||
extends | implements |
|
|
|
用于定义建立实例及引用实例,判断实例的关键字 | ||||
new | this | super | instanceof |
|
用于异常处理的关键字 | ||||
try | catch | finally | throw | throws |
用于包的关键字 | ||||
package | import |
|
|
|
其他修饰符关键字 | ||||
native | strictfp | transient | volatile | assert |
不用刻意去记每个关键字的用法和意义,后面学习中,陆陆续续都会接触到,自然而然就记住了。
在Java中,每个关键字在都有自己特定的用法,而在程序中出现的不同的关键字,最终是在告诉JVM,通过这些关键字,如何去执行程序中的代码。
在程序中灵活去运用一些关键字,可以减少代码量。
6.4、标识符
可简单理解为在Java程序中为了增强阅读性自定义的一些符号。比如:类名,方法名,变量名等。
标识符组成:
(1) 标识符由字母、数字、下划线、$组成,不能以数字开头,注意:此处的字母还可以是中文,日文等;
(2) 标识符大小写敏感;
(3) 标识符不得使用java中的关键字和保留字;
(4) 别用Java API里面的类名作为自己的类名。
(5) 首字母不能是数字。
注意:在起名字的时,只要标识符不是关键字就可以了,但为了提高阅读性,经常用有意义的英文单词作为标识符。
标识符书写规范:
包名:多单词组成时所有字母都小写。xxxyyyzzz
类名接口名:多单词组成时,所有单词的首字母大写。XxxYyyZzz
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接。XXX_YYY_ZZZ
6.5、常量
在日常生活中,经常使用数据表示事物的某些特性。比如:年龄,身高,日期等等,这些数据都是具体的数值。那么在Java中像这样的数据如何描述呢?像这样数值确定的数据,Java中用常量来描述。
程序中,固定不变的那些数据,称为常量。
常量:程序中固定不变化的值。比如:整数1,2,3,小数3.14,false,true等。
6.6、常量分类:
1)整数常量。所有整数 三类 正整数 零 负整数
2)小数常量。所有小数
3)布尔(boolean)型常量。较为特殊,只有两个数值。true 、false。
4)字符常量。将一个数字、字母或者符号用单引号( ' ' )标识。 ‘A’ ‘你’,使用单引号引用起来,中间有且只有一个符号。 ‘’ 错误格式
5)字符串常量。将一个或者多个字符用双引号(“ ”)标识。 “” 可以,这个是一个空串,“A”
6)null常量。只有一个数值就是:null.
6.7、进制:
日常生活中,经常使用十进制运算数据,但是也接触过七进制、十二进制等。那么怎么把生活中的这些数据存放在计算机中,计算机又是如何表示这些数据呢?
任何数据在计算机中都是以二进制的形式存在的。二进制早起由电信号开关演变而来。用开表示某一个数,用关表示某一个数,然后使用不同的开和关组合起来,就可以表示数据了。
一个整数在内存中一样也是二进制的。
二进制:每一个二进制数位用0,1 ;满2进1。 0B101 二进制数
八进制:每一个八进制数位用0,1,2,3,4,5,6,7 ;满8进1。用0开头表示。 0123 八进制
十进制:每一个十进制数位用0,1,2,3,4,5,6,7 ,8,9 ;满10进1。 满10进1。 123
十六进制:每一个十六进制数位用0,1,2,3,4,5,6,7 ,8,9,A,B,C,D,E,F ;满16进1。 满16进1.。用0x开头表示。 0xAF 十六进制
6.8、编码表
计算机被老美发明之后,刚开始是用来进行简单的数学运算。同时使用计算机进行简单的数据存储和处理。
因为计算机只能识别二进制数据。而生活中的使用的数据,基本没有二进制。就需要将生活中的数据转成二进制,最终是存储在计算机中。
老美就发明一个规则,使用不同的数字,对应生活中的不同符号。将所有的生活中的符号都在这个规则中对应了唯一的一个数字。
这个规则就是现在全球通用的ASCII表:
‘A’----------65
‘B’----------66
‘a’----------97
‘z’----------122
‘0’----------48
‘9’----------57
欧洲的编码表:ISO-8859-1拉丁文编码表。
东方文明古国——中国:GB2312、GBK、GB18080等
为了统一编码表:全球计算机协会,制定unicode编码表,升级后出现了UTF-8。
注意:所有的编码表都兼容ASCII。ASCII、ISO-8859-1、GB2312、GBK、utf-8
6.9、进制转换
既然知道计算机中存储的都是二进制数据,那么如何将生活中的十进制数据转换成计算机能够识别的二进制数数据呢?
十进制转二进制:十进制转成二进制--->除以2倒取余数
图例说明:把一个十进制数转成二进制数,使用短除法,不停的除以2,直到商值为0,停止,然后倒着把余数写出来,这个数就是十进制数转后的二进制数。
二进制数转十进制数:二进制转成十进制--->按2的幂数展开并累加
图例说明:将一个二进制数转成十进制数,使用按权展开,并求累加和。具体说:对于一个二进制数,从最右侧开始,使用当前二进制数位上的数据乘以2的n-1次幂(n为当前这个二进制数从右侧开始的第几位。),并这将这些数据展开后加起来求和即可得到相应的十进制数。
6.10、进制规律
计算机中是以二进制数据的形式表示所有数据,并且在计算机中把8个二进制数位当做一组,并用“字节”来表示。即:8bit = 1Byte (八个二进制数位为一个字节)。那么一个字节能表示的数据是多大呢?也就是当八个二进制数位上全部是1时能表达多大一个数据呢?
即当1个字节上全部存放的是1时,这个数据即就是255,0-255之间的任何一个正数都可以在用一个字节表示。
小技巧:对于任意一个十进制数,当要转成二进制时,也可以从上图中的128、64、32、16、8、4、2、1这些数据加起来。当有某一个数时,就说明这个二进制数位上一定存放的是1,若没有这个数,就说明这个二进制数位上一定存放的是0.
6.11、其他进制转换
发现将一个十进制数转成二进制数时,需要使用很长的01这样的数字表示,很麻烦,不利于书写和阅读,于是就想能不能把这个较长的01数字使用其他形式表示呢?
如果把一个二进制数按照每三个二进制数位为一组划分,发现这三个二进制数位数字能表示大的最大值正好为7,正好符号了八进制的表示形式。于是可以把二进制数用八进制的形式表示。
二进制转八进制:
图例说明:上图是十进制29的二进制表示形式。要把这个数转成八进制,需要从最右侧开始,把每三个二进制数位当成一个整体,转成一个八进制数位。当二进制数位高位不足三位时,用零填补。
/*
开发中,如果需要使用其他的进制数据,直接采用JAVA中存在的功能即可
*/
class Demo6
{
public static void main(String[] args)
{
int x = 63;
int y = 0b110;
int z = 0x78;
System.out.println( Integer.toBinaryString(63) );
System.out.println( Integer.toHexString(63) );
System.out.println( Integer.toOctalString(63) );
}
}
7、变量
7.1、变量的概念
变量表示内存中的一个存储区域,该区域用来不断的存放同一类型的常量数据,并可以重复使用这个区域。并且这个区域有自己的名称(变量名)和类型(数据类型)。
理解:变量就如同数学中的未知数。
7.2、定义变量的格式
数据类型 变量名 = 初始化值; int a = 12; 程序最终会根据指定的数据类型,在内存中开辟一段空间,用来存放对应类型的数据。并且需要给这个空间命名。
数据类型 变量名 ; int a;
注:格式是固定的,记住格式,以不变应万变。
7.3、变量的起名
变量表示内存中的一个存储区域,这时必须给这个区域起个名字 ,才能使用。当在给变量起名时,同样需要见名知义。
例如:String name ;使用name表示这个空间名字,即说明这个空间存放的姓名
int age ; int age ; int shenGao;
7.4、变量使用注意:
变量在使用时,必须先给变量空间存放数据,即初始化。同时变量也有自己的生命周期(使用范围,后期学到)。
8、数据类型
在生活中,使用的数据有大有小,有整数,也有小数,同时也会使用字母,或者汉字表示特定含义。在Java中根据数据的不同特点,数据也分为不同的类型。
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。
整数默认:int 小数默认:double
8.1、布尔型boolean
boolean类型通常用于逻辑运算和程序流程控制。
boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言)。
class Demo
{
public static void main(String[] args)
{
boolean flag;
flag = true;
System.out.println("flag = "+ flag);
}
}
8.2、字符型char
char型数据用来表示通常意义上得“字符”,char占2字节,的范围是[0,65535],但是前256个表示特殊字符;字符常量为 用单引号括起来的单个字符。
例如:char c = 'A'; char c2 = '传'; char c3=97;
java字符采用Unicode编码,可用十六进制编码形式表示。 char c1 = '\u0061';//a
8.3、转义字符
有部分符号在Java有特殊含义,当需要使用符号自身原有的意思时,这时可以通过转义字符表示。
例如:键盘上的制表符tab键。可以使用 ‘\t’表示。
如双引号,在Java中使用双引号表示字符串,若想使用双引号本身含义,即可使用’\”’表示。
练习:在屏幕上打印出”Java技术很牛逼”
8.4、字符编码表
从前面的介绍知道计算机中所有数据都是采用二进制表示的,怎么才能把生活中的这些字符转成二进制表示呢?
为了解决这个问题,专门制作了一张码表,这张码表中就存放所有字符与整数的对应关系。
例如:
‘A’-----> 65
‘B’----->66
‘a’------>97
‘b’------>97
...........
所以当把一个整型数据赋值给char类型数据时,计算机会查码表中这个整数所对应的字符是什么,然后将这个字符存放在char类型的空间中。
char ch = 65;其实是将A存放在ch中。
老美的码表ASCII(将英文字母(大小写)、标点符号等都编写在其中,每个符号都有一个数字和其一一对应)。
中国文字的编码表(兼容ASCII):GB2312、GBK、GB18030
全球通用编码表:unicode、UTF-8.
8.5、String类型
String不属于基本数据类型;但和字符有一定的联系。String是一个类类型,表示字符串(后面详讲); 就是一串字符,也就是多个字符连接在一起;字符串都得使用 "" 括起来的,连接字符串使用 + ;
例如:
String str;
str = "Java快快学,俺要变大神";
或 String str = " Java快快学,俺要变大神";
//字符串的连接采用 + 符号。
String s = " Java快快学," + "俺" + "要变大神";
System.out.println(s);// Java快快学,俺要变大神
8.6、整数类型
整型数据根据数据范围不同,需要使用不同的关键字来表示。
byte、short、int、long这四个关键字都可以在内存中开辟出存放整型数据的空间。
byte开辟1个字节的空间,short开辟2个字节空间,int开辟4个字节空间,long开辟8个字节空间。
byte b = 2; //会自动把2转为byte类型存放在b空间
short s = 3;
int i = 4;
long l = 5L; //当把一个值赋给long型空间时,需要在数值后面加L或l标注其为long类型
Java语言整型常量的四种表示形式:
二进制整数,0b或0B开头,如:int a = 0B110;
十进制整数,如:int a = 17;
八进制整数,要求以0开头,如 int a = 012;
十六进制整数,要求0X或0x开头,如int a = 0x12;
Java语言的整型常量默认是int型,声明long型变量后加上‘l’或‘L’
8.7、浮点(小数)类型(float、double)
double和float关键字在内存中开辟的空间可以存放小数。double开辟8个字节的空间,float开辟4个字节的空间。
Java浮点类型常量有两种表示方式:
十进制形式: 例如:3.14 ,168.0, .618
科学计数法形式: 例如:3.14e2, 3.14E2, 1000E-2
Java浮点型常量默认是double,则要声明一个常量为float型,则需在常量后加上f 或 F, 如:double pi = 3.14;//正确
float pi = 3.14F;//必须加上f,或转型 float pi3 = (float)3.14;
注意:Java里只有浮点型的变量才可以接受科学计算式结果:
int num = 3.14E2; //× num为int类型,不可以使用科学计数法
9、类型转换
9.1、隐式类型转换:
当在存储整数数据时,Java中所有的整数默认都是int类型的。所以在将-128~127之间的数据存储在byte类型空间中时,JVM会把这个int类型的数据自动转换成byte类型,然后存放在byte空间中。short同理。
class Demo
{
public static void main(String[] args)
{
//把int类型2转为byte类型存放在b空间
byte b = 2;
//把int类型234转为short类型存放在s空间
short s =234;
}
}
当把一个int类型的数据存放在char类型空间中时,也会发生隐式类型转换。
class Demo
{
public static void main(String[] args)
{
//用int类型65,到编码表中查找对应的字符,然后将字符存放在ch空间中
char ch = 65;
//直接将A字符存放在ch2空间中
char ch2 = 'A';
}
}
注意:当把超过byte和short范围的数据给他们开辟空间存放会发生编译时错误。同样把无法在编码表中查到对应字符的数据存放到char空间也会报错。
9.2、强制类型转换
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度的降低或溢出,使用时要格外注意。
强制转换格式:数据类型 变量名 = (数据类型)(值);
class Demo
{
public static void main(String[] args)
{
long l = 123L;
int i = (int) l;
double d = 3.14;
float f = (float) d;
}
}
练习:
class Demo
{
public static void main(String[] args)
{
//隐式转换
byte b = 3;
int x = 4;
//b会自动提升为int类型进行运算。
x = x + b;
//强制转换
byte b = 3;
b = b + 4;//报错
//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
b = (byte)(b+4);
}
}