第一章 Java领航员
1.1 编程语言介绍
编程语言介绍
编程是什么?
编写程序. 用键盘, 鼠标勾勒出你想要的应用程序.
编程语言呢? 我们用什么样的语法方式来编写程序.
常见的编程语言: C语言, C++, C#, Java, Python, html, css, js, go语言. sql语言.
C语言: 执行效率比较高. 一般用来做底层驱动或者操作系统.
C++: 游戏的内核. 应用程序.
C#: 微软, 支持的平台是windows. 基于.Netframework的.
Java: 世界第一. toibe排行榜.
Python: 本来是一个脚本语言. 灵活性是所有编程语言都比不了的.
html: 网页, 网站.
css: 让网页更好看.
js: 让网页能动起来.
go语言: 谷歌开发的.
sql语言: 数据库. 数据是软件的根本.
根据运行和开发的过程产生两个分支:
1. 编译型, 一次编译. 到处运行.
执行效率比较高, 跨平台行比较差.
2. 解释型, 一行一行的解释, 执行.
执行效率较低. 跨平台性比较好.
3. 混合型, java
1.2 Java简介
Java简介
Java是一门程序开发语言. 1991年由sun公司的James Gosling和他的团队一起开发了一个叫Oak的语言. 在1995年更名为Java. 一直沿用至今.
Java是目前全世界使用人数最多的编程语言. Toibe 排行榜第一. https://www.tiobe.com/tiobe-index/
丰富的开源社区和非常多的开源框架.
国内各大一线公司都在使用Java.
特点:
简单: 针对C++简化了很多
跨平台:
Java相关概念
1. JVM(Java Virtual Machine): java虚拟机, 用来模拟统一的硬件平台环境, 供java程序运行的 一个软件
2. JRE(Java Runtime Environment): java运行时环境. 里面包含了JVM和一些java运行时的类库
是java 程序的运行时环境,包含Jvm和运行时所需的核心类库
3. JDK(Java Development Kit): java开发包. 包含JRE和java开发工具包.
是java程序开发工具包:包含jre和开发人员使用的工具
其中的开发工具:编辑工具(Javac.exe)和运行工具(java.exe)
1.3 安装JDK
安装JDK是java开发的第一件事儿.
安装过程很简单. 先去官网下载. https://www.oracle.com/index.html
下载完毕之后. 就可以安装了.
安装:
傻瓜式安装,下一步既可
建议:安装路径中不要包含中文和空格,所有的开发最好安装目录统一。
安装完成.
配置环境变量
目录名称和解释
bin 该路径下存放了JDK的各种工具命令。javac和java就在这个目录
conf 该路径下存放了JDK的相关配置文件。
include 该路径下存放了一些平台特定的头文件。
jmods 该路径下存放了JDK的各种模块。
legal 该路径下存放了JDK的各模块的授权文档。
lib 该路径下存放了JDK工具的一些补充JAR包。
其余文件为说明性文档。
命令窗口检查jdk是否安装成功 以及安装的jdk版本号查询
Microsoft Windows [版本 10.0.19042.985]
(c) Microsoft Corporation。保留所有权利。
C:Windowssystem32>java
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
C:Windowssystem32>java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
C:Windowssystem32>
常用的DOS命令
操作说明
盘符名称 盘符切换。D:回车,表示切换到D盘
dir 查看当前路径下的内容
cd目录 进入单级目录。 cd harry
cd .. 回退到上一级目录
cd目录目录 进入多级目录
cls 清屏
exit 退出命令提示窗口
path 环境变量的配置
1.为什么要配置path环境变量
开发java程序 需要使用JDK提供的开发工具, 而这些工具在JDK的安装目录的bin目录下
为了在开发java的时候能够方便使用javac和java这些命令 我们需要配置path 环境变量。
如何配置path环境变量
具体步骤:
在这里插入图片描述
第4步的%JAVA_HOME%in 也可以复制jdk的bin目录
例如: D:SoftwareJavain
验证是否配置成功
在命令提示符输入 javac
备注:如果命令提示符在配置之前打开的,需要关闭命令提示符重新打开测试
Microsoft Windows [版本 10.0.19042.985]
(c) Microsoft Corporation。保留所有权利。
C:UsersHarry>javac
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名
1.4 第一个Java程序
安装完了. 废了好的的劲. 终于可以编程了.
首先, 我们在D盘下创建一个文件夹. 叫JavaProjects. 然后在JavaProjects文件夹中.创建一个文本文档. 起名为hello.java
如果创建出来的文件看不见后缀名. 需要我们对windows进行简单配置.
首先按一下alt, 然后选择工具. 文件夹选项 查看--勾选文件扩展名。点击确定就可以了
写代码
public class hello{
public static void main(String[] args){
System.out.println("你好 终于写了一个程序了.");
}
}
具体操作:
Microsoft Windows [版本 10.0.19042.985]
(c) Microsoft Corporation。保留所有权利。
C:UsersHarry>javac hello.java
javac: 找不到文件: hello.java
用法: javac <options> <source files>
-help 用于列出可能的选项
C:UsersHarry>d:
D:>cd JavaProjects
D:JavaProjects>javac hello.java
hellow.java:3: 错误: 编码GBK的不可映射字符
System.out.println("浣犲ソ 缁堜簬鍐欎簡涓?涓�▼搴忎簡.");
^
1 个错误
D:JavaProjects>
hellow.java:3: 错误: 编码GBK的不可映射字符
System.out.println("浣犲ソ 缁堜簬鍐欎簡涓?涓�▼搴忎簡.");
^
1 个错误
解决办法
解决方法有以下两种:
1、 运行时使用 javac -encoding UTF-8 文件名.java
2、 记事本打开java源文件,另存为选择ANSI编码
备注:类名和文件名要统一
例如给类名hello改为first
具体代码修改
public class first{
public static void main(String[] args){
System.out.println("你好 终于写了一个程序了.");
}
}
在运行,哈哈哈,报错了,具体信息如下
D:JavaProjects>javac -encoding UTF-8 hello.java
hellow.java:1: 错误: 类first是公共的, 应在名为 first.java 的文件中声明
public class first{
^
1 个错误
D:JavaProjects>javac -encoding UTF-8 hellow.java
D:JavaProjects>java hello
你好 终于写了一个程序了.
D:JavaProjects>
1.5 ide的选择和安装使用
IDE(集成开发环境). 是我们学习和工作中编码的工具.
java常见的IDE:
- Visual Studio code
- Eclipse
- Net Beans
- IntelliJ IDEA
VS: 微软的IDE. 包罗万象. 啥都能写. 没有VS干不了的
Eclipse: 老牌IDE. 曾经风靡全球. 至今依然活跃在各个程序员的电脑里. 简单方便. 但平台比较老旧. 对新框架支持的不够完美
Net Beans: sun公司提供的开发工具. 但是在国内使用的人不多.
IntelliJ IDEA: 俗称idea. 代码提示非常方便. 多高级框架支持的非常完美. 目前国内年轻一代程序员更喜欢的IDE工具,是用于java语言开发的集成环境,
它是业界公认的目前用于Java开发的最好的工具
集成环境:把代码编写,编译,执行调试多种功能合到一起的开发工具
我们选择使用IDEA来进行学习. 原因很简单. 我还年轻. 我自豪.
下载idea. 去官网下就行了. https://www.jetbrains.com/idea/
下载完毕之后, 直接双击安装即可, 和普通软件安装是一样的.
具体详细操作如下:
选择download
根据自己的需求选择下载的版本型号
下载后直接下一步安装
直接next
根据自己的电脑情况选择安装
安装好了以后可以写代码了,
**写个hello word **
具体操作
1.开始创建项目
2.选择empty project
3.直接下一步
4.修改项目名称和路径位置
5.修改好的项目名称和路径位置
6.直接OK保存
7.选择modules
8.新建module
9.选择jdk的安装目录
10.新建模块名称
11.直接保存
12.创建package
输入包名称
13.创建Java class
输入类名称
14.代码书写
快捷键的使用 psvm 和 sout
psvm
sout
15.开始执行
展示:
1.6 Java中的注释
注释: 对代码进行标注解释. 让人更容易读懂代码
java注释分为三种.
一. 单行注释
// 单行注释. 这一行内容会被jvm运行的时候过滤掉.
二. 多行注释
/* 多行注释 一次注释多行代码 */
三. 文档注释
/** * 文档注释 * 后期可以使用javadoc命令生成api文档 */
常用的是单行注释 // 和 文档注释 /*** /
一般在如下情况可以添加代码注释:
- l 核心的解决方案
- l 比较难懂的业务逻辑
- l 记录代码的存在经历
1.7 变量
变量
为什么要有变量?
假设我现在想计算我的生活开支.
吃饭: 100+200+120+40 = 460 交通: 10*22 = 220 衣服: 200+400+150 = 750 开支: 460 + 750 + 220 = 1430
这是我们生活中非常常用的一种计算方式.
我们很自然的把每一项开支计算出来. 然后再后面计算总和的时候把前面计算的结果拿过来使用. 那这就是生活中的变量.
变量: 可以发生改变的量. 程序运行过程中产生的中间值. 供后面的程序使用
java中的变量:
数据类型 变量名 = 值;
那这里涉及要一个很麻烦的问题. 数据类型. **什么是数据类型? 计算机是用来存储和处理数据的. **
那我们人对数据是很容易划分的. 比如什么样的是数字, 什么样的是文字. 等等. 但是计算机比较傻. 计算机只认识0,1. 我们写的文字. 数字在计算机里都是01. 那怎么对数据进行划分呢? 什么样的数据可以进行计算呢? 什么样的数据可以进行存储? 这就需要我们对不同的数据进行划分.
**常用的基本数据类型. **
-
int
**int主要表示的就是我们生活中使用的整数. **比如, 1, 10086等等.
int类型可以执行的操作: 加减乘除等. + - /
int a = 20; int b = 10; int c = a + b; System.out.println(“a + b = “ + c); int d = a - b; System.out.println(“a - b = “ + d); int e = a b; System.out.println(“a b = “ + e); int f = a / b; System.out.println(“a / b = “ + f);
double
**double表示的是小数. **比如你去菜市场买个黄瓜花费了1.25元. 这就是小数. double类型的数据可以执行的操作和int基本相同. 不同的是. 计算结果一定是小数
double a = 1.88;
double b = 1.75;
double c = a + b;
System.out.println(“a + b = “ + c);
double d = a - b;
System.out.println(“a - b = “ + d);
double e = a b;
System.out.println(“a * b = “ + e);
double f = a / b;
System.out.println(“a / b = “ + f);
-
String 字符串
String表示的是字符串. 主要是针对文字进行描述的. 这里要注意的是字符串(String) 的S必须大写
String s = “近日, 三胖又要制造超大号窜天猴了”; // 双引号括起来的内容就是字符串 System.out.println(“s = “ + s);
字符串可以进行加法运算. 表示字符串的拼接.
String s1 = “周杰伦”; String s2 = “喜欢我”; String s3 = s1 + s2; System.out.println(s3); String s4 = s3 + “, oh, yeah!”; System.out.println(s4);
-
boolean 布尔
**boolean主要表示的是真或者假. **翻译过来就是 对和错. 真命题, 假命题
boolean a = true; boolean b = false; System.out.println(a); System.out.println(b); boolean c = 1 > 2; boolean d = 2 > 1; System.out.println(c); System.out.println(d); int e = 10; // = 表示赋值 System.out.println(e == 10); // 判断是否相等要用 == System.out.println(e != 10);
boolean值是用来判断条件的
变量的简单应用
int meals = 100+200+120+40; // 餐费
int traffic = 10 * 22; // 交通费
int clothing = 200+400+150; // 服装费
int all = meals + traffic + clothing; //总和
System.out.println("一共花费:" + all); // 一共花费:1430
1.8 用户输入
用户输入
你的程序需要接收外部指令才能决定下一步操作是什么. 比如. 你一个月工资上交给老婆95%. 剩下的是你的零花钱. 此时每个月的收入是不固定的. 零花钱也是不固定的. 需要用户输入工资才能继续执行下一步操作. 此时需要用到用户输入功能.
在java中使用输入功能需要使用Scanner类来完成.
import java.util.Scanner; // 使用Scanner必须要导入这个包. 关于导包后面会详解. 暂时先这么写
public class TestIf {
public static void main(String[] args) {
// 准备一个Scanner对象
Scanner sc = new Scanner(System.in);
}
}
具体操作
// 获取到用户输入的内容
Scanner sc = new Scanner(System.in);
// 你想要什么样的数据?
// 常用的有
// 获取到int类型的数据
int i = sc.nextInt();
System.out.println("i = " + i);
// 获取到double类型的数据
double d = sc.nextDouble();
System.out.println("d = " + d);
// 获取到字符串. 以回车为结尾
String line = sc.nextLine();
System.out.println("line = " + line);
应用: 计算这个月的零花钱
Scanner sc = new Scanner(System.in);
// 提示
System.out.println("请输入您的工资:");
// 接收工资
double salary = sc.nextDouble();
// 显示工资
System.out.println("工资是:" + salary);
// 计算零花钱
double pin = salary * (1-0.95);
// 显示零花钱
System.out.println("零花钱:" + pin);
1.9 if语句
java条件判断的语句是if语句
语法1(单分支语句):
if(条件){
语句块
}
执行流程: 如果条件为真, 执行语句块
发工资了, 干嘛好呢?
Scanner sc = new Scanner(System.in);
System.out.println("请输入你一个月多少零花钱:");
double pin = sc.nextDouble();
if(pin > 500){
System.out.println("洗脚城走一波");
}
System.out.println("happy");
语法2(双分支语句):
if(条件){
语句块1
} else {
语句块2
}
执行流程: 如果条件为真, 执行语句块1, 否则执行语句块2
Scanner sc = new Scanner(System.in);
System.out.println("请输入你一个月多少零花钱:");
double pin = sc.nextDouble();
if(pin > 500){
System.out.println("洗脚城走一波");
} else {
System.out.println("捡一块砖头自己回家蹭");
}
System.out.println("happy");
语法3(多分支语句):
if(条件1){
语句块1
} else if (条件2){
语句块2
} else if(条件3){
语句块3
}…. else {
else语句
}
执行流程:
判断条件1是否成立. 如果成立. 执行语句块1, 否则, 如果条件2成立, 执行语句2, 否则, 如果条件3成立, 执行语句3……如果所有条件都不成立. 执行else语句.
// 输入考试分数
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score >= 100){
System.out.println("优秀");
} else if (score >= 80 ){
System.out.println("良好");
} else if (score >= 70 ){
System.out.println("中等");
} else if (score >= 60 ){
System.out.println("及格");
} else {
System.out.println("不及格");
}
注意: 在if语句中. 如果一个条件成立了. 其他条件就不再判断了. 也不会执行了.
1.10 while循环
相信大家都有打游戏的经历. 玩游戏的时候, 最无聊的工作是什么呢? 没错~ 升级. 做任务. 简直痛苦的不要不要的. 但是呢, 现在几乎每个游戏都有等级系统. 这就让我这种懒人玩家难以忍受. 怎么办呢? 写个脚本~~~ 哈哈. 你想多了. 我可以模拟.
System.out.println("1. 登录");
System.out.println("2. 找个怪多的地方");
System.out.println("3. F1~");
System.out.println("4. 换个地方继续");
System.out.println("3. F1~");
System.out.println("4. 换个地方继续");
System.out.println("3. F1~");
System.out.println("4. 换个地方继续");
System.out.println("3. F1~");
System.out.println("4. 换个地方继续");
System.out.println("5. 无聊走了");
哎~ , 游戏都是无聊的. 编程才是我的菜.
在上面的程序中, 不知道你发现没有. 3, 4两步在不停的执行. 如果我就执行3-4次还没什么问题. 这要是刷一个小时~ 你要写多少代码啊. 怎么办呢? 别担心. 在编程的世界里有一种特别扭B的存在. 就是循环. 它可以完美的解决上面代码重复的问题.
java中的循环. 有三种.
- for循环
- while循环
- do..while循环
今天我们主要就讲一种. 叫while循环. 剩下的两种, 我们会在<基础进阶>里继续给大家介绍.
while循环语法:
while(条件){
循环体
}
执行流程: 程序会首先判断条件是否为真, 如果真, 则执行循环体. 然后再次判断条件是否为真.如果真, 继续执行循环体, 直到条件为假, 程序退出.
while(true){
System.out.println("还我钱");
}
这样的循环被称为死循环, 那如何能正常的结束循环呢? 改变条件啊
int a = 0;
while (a < 10){
System.out.println("还我钱");
a = a + 1 ;
}
OK, 接下来. 让我们完成最开始的那个需求,
System.out.println("1. 登录");
System.out.println("2. 找个怪多的地方");
int i = 0;
while(i < 5){
System.out.println("3. F1~ 来自东方的神秘力量.");
System.out.println("4. 换个地方继续.");
i = i + 1;
}
System.out.println("5. 没意思, 走了~");
小试牛刀
首先, 我得先给你们一段代码. 这段代码可以帮我们产生一个随机数
Random rd = new Random();
int n = rd.nextInt(100); // n是一个随机数. 范围是[0,99]
System.out.println(n); // 打印看看
OK. 我们已经可以产生随机数了. 剩下的请看要求:
让用户输入一个数字a, 判断用户输入的a和n之间的关系.
- 如果用户猜大了. 提示 猜大了. 继续猜
- 如果用户猜小了. 提示 猜小了. 继续猜
- 如果用户猜对了. 提示 猜对了. 结束循环
具体操作代码:
// 随机数生成器
Random rd = new Random();
// 创建一个整数随机数 [0,99]
int n = rd.nextInt(100);
Scanner sc = new Scanner(System.in);
boolean flag = true;
while(flag == true) {
System.out.println("请输入一个0-99之间的数字:");
int a = sc.nextInt();
if(a > n){
System.out.println("猜大了");
} else if(a < n){
System.out.println("猜小了");
} else {
System.out.println("猜对了");
flag = false;
}
}