一、Java基本介绍
1.Java 简介
- Sun公司(Stanford University NetWork)美国的斯坦福大学 在1995年推出的高级编程语言。
- Java之父: 詹姆斯 • 高斯林(James Gosling)
- Sun公司在2009年被甲骨文(Oracle)公司给收购了。
1.1 Java的优势
- 使用最广泛,且简单易学
- Java 是一门强类型语言
- Java 有非常完善的异常处理机制
- Java提供了对于大多数大数据的基础性支持
2. Java开源的跨平台语言
- 开源
- 跨平台
- 指的是:用Java代码编写的程序,可以在不同的操作系统上运行
- JVM
- 原理:
- 有JVM保证Java程序的跨平台性,但是JVM本身并不能跨平台。

3.JDK 和JRE的区别以及下载和JDK安装
- JDK (Java Development Kit) ==> Java开发工具包
- JRE (Java Runtime Environment) ==>Java运行时环境
- JVM (Java Virtual Machine) ==> Java虚拟机
- JDK和JRE的图解:

- JDK的安装(无论mac还是windows)
- 安装路径(以后但凡是安装开发软件, 都要满足以下两点: )
- 不要直接安装到盘符目录下.
- 安装路径最好不要出现中文, 空格等特殊符号.
4. 配置PATH变量
- Windows 配置Path环境变量
- 新建一个系统变量: JAVA_HOME, 它的值就是你安装的JDK的路径(注意: 不要带bin这一级)

- 在path中配置你刚才设置好的JAVA_HOME环境变量.
%JAVA_HOME%\bin
java -version
- %JAVA_HOME%\bin 这个是干啥的?
- %JAVA_HOME%\bin 等价于 C:\software\officeSoftware\jdk1.8.0_122\bin
- %JAVA_HOME%读取jdk安装路径,再拼接\bin
- bin里面存储java,javac等命令,可以在你的cmd中直接使用
- Mac 配置环境变量
/usr/libexec/java_home -V
vim ~/.bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bash_profile
java -version
5. 开发Java程序的IDE
- IDE解释
- 全称叫 集成开发环境(Integrated Development Environment) 即:集代码的编写,编写,运行,调试等 工程一体的软件
- IDE解释
- IDE全程IntelliJ IDEA,是Java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具
- IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格。
- 它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Python等少数语言
6. IDEA创建项目和模块
- IDEA创建项目流程
- 1.新建一个工作空间(workspace)
- 2.新建一个项目(例如:JavaSE)
- 3.在项目下新建模块(例如:Day01,Day02…)
- 4.在模块下新建包
- 包名需要遵循全部小写方式,一般是公司域名反写 (例如:com.baidu.demo01)
- 5.在包中创建类(例如:HelloWorld.java)
- IDEA创建项目的两种方式:
- 方式1:一天一个项目
- 方式2:整个JavaSE一个项目,每天一个模块 【推荐】

8. IDEA如何导入导出和删除模块
- 导出
- 导入:最简单的方式
- 方式1:
- 先把模块复制到指定目录
- 新建一个和本地模块名称一模一样的模块,那么该模块就会被自动导入
- 方式2:直接将复制代码到src下
- 删除项目:
- 右击项目,选择:Remove Module选项即可
二、Java的基础语法
1.Java注释和关键字的基本使用
- 注释概述: 就是用来对程序进行解释和说明的文字,提高代码可读性, 并不会执行注释中的内容.
分类:
package demo01;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
System.out.println("----------------[华丽分割线]----------------");
int sum = getSum(1, 2);
System.out.println(sum);
}
public static int getSum(int a ,int b){
return a + b;
}
}
关键字概述:
被JAVA语言赋予了特殊含义的单词
特点:
1.'关键字全部是小写的。'
2.'编辑器针对于关键字都会高亮显示'
举例:
public protected private class static void int ......
扩展:什么是保留字?
'可以理解为: 备胎'
在目前版本中还不是关键字的单词,但是有关键字的作用,将来在新的JDK版本中可能升级成关键字
例如:goto , const
2.Java的常量的基本使用
- 常量概述: 指的是在程序的执行过程中,其值不能发生改变的量。
例如:
'光的传播速度,人的性别,圆周率'
分类:
字面值常量:
字符 'a' , 字符串 "james" , 整数 520 , 小数 13.14 ,布尔 true false , 空 null
自定义常量:
通过final 修饰的。 面向对象
package demo01.demo02_basic;
public class Demo01_Const {
public static void main(String[] args) {
System.out.println('暖');
System.out.println('男');
System.out.println('7');
System.out.println(' ');
System.out.println("----------------[华丽分割线]----------------");
System.out.println("Hello world");
System.out.println("----------------[华丽分割线]----------------");
System.out.println(10);
System.out.println(20);
System.out.println(30);
System.out.println("----------------[华丽分割线]----------------");
System.out.println(13.14);
System.out.println(5.21);
System.out.println("----------------[华丽分割线]----------------");
System.out.println(true);
System.out.println(false);
System.out.println("----------------[华丽分割线]----------------");
String s = null;
System.out.println(s);
}
}
3.Java的变量的基本使用
- 变量概述: 指的是在程序的执行过程中, 其值能在一定范围内发生改变的量.
三要素:
1.如何限定变量值的变化范围
数据类型
2.如何使用这个变量的值
变量名
3.如果使用某个变量,不给初始值行不行
不行
语法格式:
数据类型 变量名称 = 初始化值
int a = 10;
注意点: '最后必须要写分号(;) , 一个分号表示一行 '
package demo01.demo02_basic;
public class Demo02_Var {
public static void main(String[] args) {
String name = "kobe";
int number;
number = 24;
String team = "lakers";
System.out.println(name + " - " + number + " - " + team);
}
}
4.Java数据类型的基本使用
分类:
基本类型:
整型
byte(-128~127) 1个字节,
short 2个字节,
int 4个字节,
long 8个字节
浮点型
float 4, double 8
字符型
char 2
布尔型
boolean 1
引用类型:
除了上述之外, 所有, 例如: 类, 接口, 数组.
数据类型的小细节:
1. 默认的整形是int, 默认的浮点型是double.
2. long类型的变量值要加L, float要加F.
3. boolean类型的变量值只有true和false.
package demo01.demo02_basic;
public class Demo03_Type {
public static void main(String[] args) {
byte b1 = 10;
System.out.println("b1 " + b1);
short b2 = 20;
System.out.println("b2 " + b2);
int in = 4598;
System.out.println("in " + in);
long lo = 1024L;
System.out.println("lo " + lo);
System.out.println("----------------[华丽分割线]----------------");
float f1 = 13.14F;
System.out.println("f1 " + f1);
double d1 = 3.1415926;
System.out.println("d1 " + d1);
System.out.println("----------------[华丽分割线]----------------");
char str = '爱';
System.out.println("str " + str);
boolean flag1 = true;
boolean flag2 = false;
System.out.println("flag1 " + flag1);
System.out.println("flag2 " + flag2);
}
}
5.Java的变量的注意事项
1.变量未赋值,不能使用的
2.变量只能在所属范围内有效
3.一行可以定义多个变量,但不建议这样写
package demo01.demo02_basic;
public class Demo04_Variable {
public static void main(String[] args) {
int age;
{
String name = "curry";
System.out.println(name);
}
int a = 10 ,b = 20 ,c = 30 ,d;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
6 Java的数据类型转换
分类:
隐式类型转换: 也叫自动类型转换
特点:
把小范围的值给大的数据类型
大装小 理解:把一杯水倒入大水缸,大水缸能容纳
写法:
正常赋值即可.
强制类型转换: 也叫显式类型转换
特点:
把大范围的值给小的数据类型, 可能会丢失精度.
小装大 理解:把一缸水倒入一杯水,杯水不能容纳,需要拓容,也就是需要强制类型转换
写法:
目标数据类型 变量名2 = (目标数据类型)变量值1;
int a = (int)13.14
核心: 基本类型的范围如下:
byte < short, char < int < long < float < double
注意:boolean不参与.
package demo01.demo02_basic;
public class Demo05_TransFrom {
public static void main(String[] args) {
int age = 10;
double d1 = age;
System.out.println(d1);
System.out.println("----------------[华丽分割线]----------------");
double price = 99.99;
int target = (int)price;
System.out.println(target);
}
}
7.ASCII码表介绍
package demo01.demo02_basic;
public class Demo06_ASCII {
public static void main(String[] args) {
System.out.println('a' + 0);
System.out.println('A' + 0);
System.out.println('0' + 0);
}
}
8.Java的运算符详解
- 运算符解释
- 就是用来操作变量和常量得到操作符
- 表达式介绍
- 用运算符连接起来的式子就叫做表达式,例如:a+b, 叫做 算术表达式 a > b就叫做关系表达式
运算符分类
算术运算符:
+, -, *, /, %, ++, --
赋值运算符:
=, +=, -=, *=, /=, %=
关系运算符: >, < , >= , <=
逻辑运算符: &&, ||, !
三元运算符: 条件表达式 ? 表达式条件成立的值 : 表达式条件不成立的值;
细节:
1. Java中整数相除, 结果肯定是整数.
2. ++(自增运算符), --(自减运算符), 用法如下(此处以++举例):
单独使用:
前加后加没有区别.
参与运算:
前加: 先自身+1, 然后以新值运算.
后加: 先以原值运算, 然后自身+1.
package demo01.demo02_basic;
public class Demo07_Operator {
public static void main(String[] args) {
System.out.println(10 / 3);
System.out.println("----------------[华丽分割线]----------------");
int a = 10;
int Sum = a++ + --a + ++a;
System.out.println(a);
System.out.println(Sum);
System.out.println("----------------[华丽分割线]----------------");
int b = 10;
b += 20;
System.out.println("b " + b);
System.out.println("----------------[华丽分割线]----------------");
boolean f1 = 10 > 20;
boolean f2 = 10 < 20;
System.out.println(f1);
System.out.println(f2);
System.out.println("----------------[华丽分割线]----------------");
System.out.println(true && true);
System.out.println(true && false);
System.out.println(false && true);
System.out.println("----------------[华丽分割线]----------------");
System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || true);
System.out.println("----------------[华丽分割线]----------------");
System.out.println(!true);
System.out.println(!!!!true);
System.out.println("----------------[华丽分割线]----------------");
String name = 23 > 24 ? "kobe" : "jordan";
System.out.println(name);
}
}
四、Scanner
1.Scanner 基本用法
- Scanner简介: 类似于python中的input(),就是用来做键盘输入的。
使用步骤:
1. 导包
import java.util.Scanner;
2. 创建对象
Scanner sc = new Scanner(System.in);
3.调用方法
int类型
int num = sc.nextInt();
整行 字符串类型
String str = sc.nextLine();
package demo01.Scanner;
import java.util.Scanner;
public class Demo01_Scanner {
public static void main(String[] args) {
System.out.println("请输入一个球员的信息(姓名、年龄、号码、球队): ");
Scanner sc = new Scanner(System.in);
String player = sc.nextLine();
System.out.println(player);
}
}
键盘录入三个人的身高
思路:
1.创建Scanner对象
2.提示录入三个人的身高
3.比较 获去最大值
4.打印结果。
package demo01.Scanner;
import java.util.Scanner;
public class Demo02_Example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个人的身高: ");
double h1 = sc.nextDouble();
System.out.println("请输入第二个人的身高: ");
double h2 = sc.nextDouble();
System.out.println("请输入第三个人的身高: ");
double h3 = sc.nextDouble();
double tall = h1 > h2 ? h1 : h2;
double tall2 = h1 > h3 ? h1 : h3;
double best = tall > tall2 ? tall : tall2;
double max1 = h1 > h2? (h1 > h3 ? h1 : h3) : (h2 > h3 ? h2 : h3);
System.out.println("最高的身高为: " + best);
System.out.println("最高的身高为: " + max1);
}
}
五、流程控制语句
流程控制语句分类:
顺序结构:
代码从上往下,从左往右,一次执行。
分支结构:
if结构: 主要用于范围校验。
switch结构: 主要用于固定值校验
枚举: 已关注 取消关注 拉黑 删除
循环结构:
for: 主要用于循环次数 已知。
while: 主要用于循环次数不固定。
1. 流程控制语句_顺序结构
package demo04__if_for;
public class Demo01 {
public static void main(String[] args) {
System.out.println("start");
System.out.println("55" + "开没有开挂" + 55 + 55);
System.out.println("end");
}
}
2. 流程控制语句_if分支结构
分支结构:
if结构:主要用于范围校验。
if单分支:
if(关系表达式){
语句体1;
.....
}
if双分支:
if(关系表达式){
语句体1;
} else{
语句体2;
}
if多分支:
if(关系表达式1) {
语句体1;
} else if(关系表达式2) {
语句体2;
} else if(关系表达式3) {
语句体3;
} else {
语句体n;
}
switch: 主要用于固定值校验.
package demo01.demo04__if_for;
import java.util.Scanner;
public class Demo02_IF {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的成绩: ");
double score = scanner.nextDouble();
if (score > 60){
System.out.println("恭喜你,及格啦");
}
if (score > 60) {
System.out.println("恭喜你,及格啦");
} else {
System.out.println("宝贝,回家请你吃大饼");
}
if (score >= 90){
System.out.println("非常优秀");
} else if (score >= 80){
System.out.println("考的不错再接再厉");
} else if (score >= 60){
System.out.println("刚及格少玩游戏 小心老娘的皮带");
} else{
System.out.println("宝贝,回家请你吃大饼");
}
}
}
2.1 流程控制语句_switch分支结构
分支结构:
if结构: 主要用于范围校验.
switch: 主要用于固定值校验.
switch(值) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
....
default:
语句体n;
break;
}
细节:
1. switch小括号中可以放什么:
JDK1.5以前: byte, short, char, int
JDK1.5: 枚举 man female
JDK1.7: String
2. 如果不写break会发生什么?
可能会发生case穿透(即不判断case值的情况下, 程序继续往下执行).
如果最后一个break不写, 对结果没有影响.
3. switch的结束标记:
1.遇到break.
2.遇到switch的右大括号}
package demo01.demo04__if_for;
import java.util.Scanner;
public class Demo03_Switch {
public static void main(String[] args) {
System.out.println("请输入一个月份: ");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch (month){
case 12:
System.out.println("寒冬观雪,醒亦念卿,梦亦念卿");
break;
case 1:
System.out.println("寒冬观雪,醒亦念卿,梦亦念卿");
break;
case 2:
System.out.println("寒冬观雪,醒亦念卿,梦亦念卿");
break;
case 3:
System.out.println("春赏百花,醒也思卿,寐也思卿");
break;
case 4:
System.out.println("春赏百花,醒也思卿,寐也思卿");
break;
case 5:
System.out.println("春赏百花,醒也思卿,寐也思卿");
break;
case 6:
System.out.println("夏夜观星,撩亦动心,扶亦动心");
break;
case 7:
System.out.println("夏夜观星,撩亦动心,扶亦动心");
break;
case 8:
System.out.println("夏夜观星,撩亦动心,扶亦动心");
break;
case 9:
System.out.println("秋深落叶,醒亦念卿,梦亦念卿");
break;
case 10:
System.out.println("秋深落叶,醒亦念卿,梦亦念卿");
break;
case 11:
System.out.println("秋深落叶,醒亦念卿,梦亦念卿");
break;
default:
System.out.println("么得这个季节");
break;
}
}
}
- switch穿透精简写法代码 对上面的代码进行些许改造
package demo01.demo04__if_for;
import java.util.Scanner;
public class Demo04_Switch {
public static void main(String[] args) {
System.out.println("请输入一个月份: ");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch (month){
case 12:
case 1:
case 2:
System.out.println("寒冬观雪,醒亦念卿,梦亦念卿");
break;
case 3:
case 4:
case 5:
System.out.println("春赏百花,醒也思卿,寐也思卿");
break;
case 6:
case 7:
case 8:
System.out.println("夏夜观星,撩亦动心,扶亦动心");
break;
case 9:
case 10:
case 11:
System.out.println("秋深落叶,醒亦念卿,梦亦念卿");
break;
default:
System.out.println("么得这个季节");
break;
}
}
}
3.流程控制语句_循环基本使用
循环结构:
for: 主要用于循环次数已知.
for(初始化条件1; 判断条件2; 控制条件4) {
循环体3;
}
执行流程:
第1次执行: 1, 2, 3, 4 如果判断条件成立.
重复执行: 2, 3, 4
最后1次执行: 2 判断条件不成立.
while: 主要用于循环次数不固定.
初始化条件1;
while(判断条件2) {
循环体3;
控制条件4;
}
package demo01.for_while;
public class Demo01_For_While {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("跑了第" + i + "圈");
}
System.out.println("----------------[华丽分割线]----------------");
int j = 1;
while (j <= 10){
System.out.println("跑了第" + j + "圈");
j++;
}
}
}
4.流程控制语句_循环进阶
package demo01.for_while;
public class Demo02_99 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + " * " + i + " = " + (i * j) + "\t");
}
System.out.println();
}
}
}
7.猜数字小游戏
可以获取0.0 ~ 1.0 之间的所有数据,左包右不包。
Math.random();
实例:
获取1 ~ 100之间的随机整数
int num = (int)(Math.random() * 100 + 1);
package demo01.for_while;
import java.util.Scanner;
public class Demo03_GuessNumber {
public static void main(String[] args) {
double r1 = Math.random();
System.out.println(r1);
int num = (int)(Math.random() * 100 + 1);
System.out.println(num);
while (true){
System.out.println("请输入一个(1 ~ 100)整数: ");
Scanner scanner = new Scanner(System.in);
int input_num = scanner.nextInt();
if (input_num > num) {
System.out.println("您输入的大了! 请再次输入");
} else if (input_num < num) {
System.out.println("您输入的小了!请再次输入");
} else {
System.out.println("恭喜您猜对了");
break;
}
}
}
}
8. 案例练习
水仙花数解释
1. 水仙花数是一个3位数的整数.
2. 该数字的各个位数立方和相加等于它本身.
3. 例如: 153就是水仙花数, 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 153
package demo01.for_while;
public class SXH {
public static void main(String[] args) {
for (int i = 100; i <= 1000; i++) {
int ge = (i / 1) % 10;
int shi = (i / 10) % 10;
int bai = (i / 100) % 10;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
System.out.println(i + "是水仙花数");
}
}
}
}
- 案例二 打印1-100之间的所有质数,按照五个一行的格式输出,格式如下
2 3 5 7 11
13 17 19 23 29
31 ....
提示:质数只能被1和自身整除的数字,最小的质数是2
package demo01.for_while;
public class ZhiShu {
public static void main(String[] args) {
int count = 0;
A:for (int i = 2; i <= 100; i++) {
for (int j = 2; j <= i/2; j++) {
if (i % j == 0){
continue A;
}
}
count++;
if (count % 5 == 0) {
System.out.print(i + "\r\n");
} else {
System.out.print(i + "\t");
}
}
}
}