Day01-Java核心基础
一、高级语言运行机制
1:解释型语言 —每次运行源代码都需要专门的解释器把它逐行解释成机器码并且立即执行
存在问题:可能效率低 python
2:编译型语言 —将源代码使用专门的编译器编译成机器语言文件,一次编译,以后直接运行
存在问题:效率高 java
二、java历史
sun公司 1995 、java之父: 詹姆斯高斯林
2009年被甲骨文公司收购
三、java版本
javaSE: 标准版
javaME: 小型版
javaEE: 企业版
四、java特点
开源:源代码是开放的
跨平台:指的就是在不同的操作系统上能够运行java程序
原理: jvm保证了java程序的跨平台,jvm本身是不能跨平台
多态:后面课程介绍
多线程:后面课程介绍
面向对象:后面课程介绍
五、java环境搭建
jdk,jre,jvm关系
1:jvm 保证跨平台的
2:jre=核心类库 +jvm 保证跨平台的
3:jdk=jre+开发工具(javac.exe java.exe)
安装java
目的:能够在电脑的任意目录下找到java命令
配置:
JAVA_HOME
D:\install\jdk1.8
path:新增
%JAVA_HOME%\bin
验证:cmd java -version
六、第一个java程序
Java代码编写步骤:
第一步 编写代码 :创建一个Hello.java文件
第二步:编译代码 :javac Hello.java
第三步:运行代码 : java Hello
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TtfDaKKw-1670500532908)(…/img/java编写、编译、运行.png)]
七、idea的使用
1:安装
2:创建项目
3:快捷键
①main方法: psvm ② 输出语句: sout ③复制一行: ctrl+d ④ 格式化代码: ctrl+alt+L
⑤ 删除一行: ctrl+y ⑥ 进入源码: ctrl+b ⑦ 单行注释: ctrl+/ ⑧ 多行注释: ctrl+shift+/
4:包的命名规范
一般情况下公司的域名反过来
公司域名:https://www.itcast.cn/
包命名规范:cn.itcast [建议所有同学遵守!!!]
八、java基础语法和运算符
一、什么是注释 :对代码解释说明的文字
二、注释的分类 ①//单行注释
②/* 多行注释 */
③/** 文档注释 */
三、分隔符
大括号{} : java里是一个代码块,是一个整体
小括号() : 方法声明上形参,调用方法实参
中括号[] : 带表数组类型 元素: {1,2,3}
分号 ; : 每一行结尾都需要加 ; 代表这一行的结束
圆点 . : 包名分层, 类/对象,调用它成员
四、关键字
什么是关键字:被java赋予特殊含义的单词 -全部小写
五、标识符
什么是标识符:标识符就是用来给类, 接口, 方法, 变量, 包等起名字的规则.
命名规则:
①:标识符只能包含52个英文字母(区分大小写)、0 ~ 9数字 、$(美元符号)和_(下划线)
②:标识符不能以数字开头。
③:标识符不能和Java中的关键字重名。
④:最好做到见名知意.
接口、类、变量、包命名规则
①:类, 接口的命名规范: 每个单词的首字母都大写, 其他字母全部小写.(大驼峰命名法)
例如:HelloWorld, Demo Test
②:变量, 方法的命名规范: 从第二个单词开始, 每个单词的首字母都大写, 其他字母全部小写
(小驼峰命名法).
例如: userName getSum
③:包的命名规范: 所有字母全部小写, 多级包之间用.(点符号)隔开, 一把是公司的域名反写.
例如: cn.itcast, com.itheima
六、变量&常量
常量:常量是在运行过程中,其值不能发生改变的量,叫做常量
常量的分类:
整数常量:直接写
小数常量:直接写
字符串常量:值要用’'括起来,且内容只有一个字符
字符串常量:值要用“”括起来
布尔常量:值比较特殊,只有true(成立),false(不成立)
变量:程序执行过程中值可以改变的量
格式:声明赋值:数据类型 变量名=值;
方式一:
int a=10;
数据类型 变量名=值;
–数据类型:变量变化的范围就是数据类型
–变量名:每个变量都有一个名字,方便存取。
–初始化值:使用变量前,需要给变量赋值。
注意:先声明,后赋值
方式二:
int a; 声明变量
a=10;赋值变量
没有赋值不能直接打印
方式三:
一行上可以定义多个变量,但是不建议.
int e = 10, f = 20, g = 30
注意事项
①变量未赋值,不能使用.
②变量只在它所属的范围内有效.
③一行上可以定义多个变量,但是不建议
七、数据类型
面试问题:java的数据类型有哪些?
基本类型有哪些??四类八种(错!!!)
基本数据类型和引用数据类型
基本&引用数据类型:
基本数据类型(简称: 基本类型):– byte, short, char, int, long, float, double, boolean
引用数据类型(简称: 引用类型):String, 数组, 类, 接口, 目前先了解, 后续会详细讲解
类型范围:
①byte类型的取值范围是: -128 ~ 127,char类型的取值范围是: 0 ~ 65535
②默认的整形是: int类型, 默认的浮点型(即: 小数类型)是: double类型.
③定义long类型的数据时, 数据后边要加字母L(大小写均可), 建议加L
④定义float类型的数据时, 数据后边要加字母F(大小写均可), 建议加F
八、数据类型转换
为什么要进行数据类型转换 ?
Java程序中要求参与计算的数据,必须保证数据类型的一致性,如果数据类型不一致将发生类型转换
两种数据类型转换
自动(隐式)转换:
指的是小类型转大类型,会自动提升为大类型,运算结果是大类型.
大白话翻译: 将取值范围小的类型自动提升为取值范围大的类型
1.定义两个int类型的变量a和b, 分别赋值为10, 20.
int a=10,b=20;
2.通过输出语句打印变量a和b的和.
System.out.println(a+" "+b)
3.定义int类型的变量c, 接收变量a和b的和.
int c=a+b;
4.打印变量c的值.
System.out.println(c);
5.定义两个变量aa和bb, 一个是int类型的数据, 另一个是byte类型的数据.
int aa=1;
byte bb=2;
6.定义变量cc接收 变量aa和bb的和.
int cc = aa+bb;
分别设置变量cc的数据类型为byte类型和int类型, 观察结果并打印.
byte cc = aa+bb;
System.out.println(cc);
强制(显式)转换:
指的是手动将大类型转换成小类型,运算结果是小类型.
大白话翻译: 将取值范围大的类型强制转换成取值范围小的类型.
强制类型转换格式:数据类型 变量名 = (数据类型)要被转换的数据值;
public class NarrowConversion{
private static String main(String[] args) {
int iValue =232;
//强制把一个 int 类型的值转换成 byte 类型的值
byte bValue=(byte)iValue;
// 将输出-23
System.out.println(bValue);
double dValue=3.98;
// 强制把一个 double 类型的值转换成 int 类型的值
int tol = (int)dValue;
// 将输出 3
System.out.println(tol);
}
}
九、运算符
算术:+, -, *, /, %, ++, –
赋值:= += -= /= %=
关系:== != > >= < <=
逻辑:
&&-短路与 短路效果: 如果左边为false,右边就不执行了
||-短路或:短路效果: 如果左边为true,右边就不执行了
!-逻辑非:取反的意思, 以前为true, 取反后为false, 以前为false, 取反后为true.
^-逻辑异或:异同的意思, 相同为false, 不同为true.
三元:关系表达式 ? true的时候执行此处 : false的时候执行此处 ;
++ – 详解
++ 运算,变量自己增长1。
– 运算,变量自己减少1,
• 独立运算:
– 变量在独立运算时,前++和后++没有区别 。
– 变量前++ :例如 ++i 。
– 变量后++ :例如 i++ 。
• 混合运算:
– 和其他变量放在一起,前++和后++就产生了不同。
– 变量前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
混合运算
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
变量后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
三元运算案例 :求两个数字的最大值
public class OperatorDemo04 {
public static void main(String[] args) {
//1. 定义两个int类型的变量a. b, 初始化值分别为10, 20
int a = 10, b = 20;
//2. 通过三元运算符, 获取变量a和b的最大值.
int max = a < b ? b : a;
//3. 将结果(最大值)打印到控制台上.
System.out.println(max);
}
}
十、键盘录入
类似于Python中的input(),raw_input(), Java中也是支持键盘录入的
一、
①导包: import java.util.Scanner;
②创建对象:Scanner sc=new Scanner(System.in);
③让对象干活:int a=sc.nextInt();
需求
1.提示用户录入他/她的年龄.
2.通过键盘录入功能, 接收用户录入的年龄.
3.将用户录入的数据(年龄)打印到控制台上.
//导包
import java.util.Scanner;
public class ScannerDemo01 {
public static void main(String[] args) {
//1. 提示用户录入他/她的年龄.
System.out.println("请录入您的年龄: ");
//2. 通过键盘录入功能, 接收用户录入的年龄.
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
//3. 将用户录入的数据(年龄)打印到控制台上.
System.out.println("age: " + age);
}
}
十一、流程控制语句
一、流程控制语句概述
1、顺序结构-从上往下
2、分支语句
if语句 :单分支、if双分支、if多分支
switch语句
3:循环语句
for循环(次数固定);while(次数不固定);do…while
二、分支语句之if
if 单分支
if(条件){
语句体;
}
-------需求-------------
定义变量time表示时间, 如果它的范围是在[0,8]之间, 就打印早上好, 否则不操作.
public class IfDemo01 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
}
}
}
if双分支
if(条件){
语句体1;
}else{
语句体2:
}
-------需求-------------
1.提示用户键盘录入一个数据并接收.
2.判断该数据是奇数还是偶数, 并将结果打印到控制台上.
public class IfDemo03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数: ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
}
}
if多分支
if(条件1){
语句体1;
}else if(条件2){
语句体2:
}else if(条件3){
语句体2:
}...
else{
语句体n+1;
}
-----------需求--------------------
需求
1.小明快要期末考试了,小明爸爸对他说,会根据他的考试成绩,送他不同的礼物.
2.假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
3.礼物标准如下:
–95~100 山地自行车一辆
–90~94 游乐场玩一次
–80~89 变形金刚玩具一个
–80以下 胖揍一顿
import java.util.Scanner;
public class IfDemo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入小明的考试成绩: ");
int score = sc.nextInt();
if (score >= 95 && score <= 100) {
System.out.println("奖励小明: 山地自行车一辆");
} else if(score >= 90 && score < 95) {
System.out.println("奖励小明: 游乐场玩儿一次");
} else if(score >= 80 && score < 90) {
System.out.println("奖励小明: 变形金刚玩具一个");
} else if(score >= 0 && score < 80){
System.out.println("奖励小明: 男女双混组合拳 + 扫帚棒法");
} else {
System.out.println("考试成绩录入有误.");
}
}
}
三、分支语句之Switch
一般是用于做固定值判断的, 在实际开发中, 用到的频率也非常高,
一、格式
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
二、表达式: 基础类型: byte short char int ; jdk1.5: 枚举;jdk1.7: String
三、执行流程
-
先计算表达式的值, 然后按照从上往下的顺序依次和每一个case对应的值相匹配.
-
如果能匹配成功, 则执行该case对应的语句体, 然后执行break, 至此, 整个switch语句结束.
-
如果和所有的case值都不匹配, 则执行default对应的语句体, 然后执行break, 至此, 整个switch语句结束.
四、case穿透
一:什么是case穿透 ?
在switch语句中,如果case的后面不写break,将出现case穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束
/*
需求
1.一年有12个月, 分属于春夏秋冬4个季节, 键盘录入一个月份, 请用程序实现判断该月份属于哪个季节, 并输出。
2.具体标准如下:
1.输入: 1、2、12 输出:冬季
2.输入: 3、4、5 输出:春季
3.输入: 6、7、8 输出:夏季
4.输入: 9、10、11 输出:秋季
–输入:其它数字 输出:数字有误
*/
public class Demo6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入月份:");
int m= sc.nextInt();
switch (m){
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;
}
}
}
四、循环语句之for
适用于:for(次数固定的)
格式:
for(初始化语句;条件判断;条件控制 ){
循环体;
}
需求
1.通过for循环, 打印1~5之间的数字.
2.通过for循环, 打印5~1之间的数字.
public class ForDemo02 {
public static void main(String[] args) {
//1. 通过for循环, 打印1~5之间的数字.
for (int i = 1; i <= 5 ; i++) {
System.out.println(i);
}
System.out.println("--------------");
//2. 通过for循环, 打印5~1之间的数字.
//ritar
for (int i = 5; i >= 1; i--) {
System.out.println(i);
}
}
}
五、循环语句之while
适用于:次数不固定的
格式:
初始化条件1;
while(判断条件2) {
//循环体3;
//控制条件4;
}
获取1~100之间所有偶数和, 并将结果打印到控制台上.
在控制台打印10次HelloWorld.
public class WhileDemo01 {
public static void main(String[] args) {
int i = 0;
while(i < 10) {
System.out.println("Hello World!");
i++;
}
}
}
获取1~100之间所有偶数和, 并将结果打印到控制台上.
//需求: 获取1 - 100之间的偶数和.
public class WhileDemo02 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i <= 100) {
if (i % 2 == 0)
sum += i;
i++;
}
System.out.println("1-100之间的偶数和为: " + sum);
}
}
六、循环语句之do…while
格式:
初始化语句;
do{
循环体;
条件控制;
}while(条件判断);
七、死循环
概念:所谓的死循环指的是永不会结束的循环, 也就是循环的判断条件永远为true,
格式:java三种死循环写法
• for(;😉 { }
• while(true){ }
do{}while(条件判断);
public class DeadLoop {
public static void main(String[] args) {
/*for(;;) {
System.out.println("Hello World!");
}*/
/*while(true) {
System.out.println("Hello World!");
}*/
do {
System.out.println("Hello World!");
} while(true);
}
}
八、循环跳转
概念:有些时候, 我们想提前终止循环的执行, 或者跳过循环的某一次执行,
分类:
• break: 是用来终止循环的, 循环不再继续执行.
• continue: 用来结束本次循环, 进行下一次循环的, 循环还会继续执行.
九、循环嵌套
概念:所谓的循环嵌套指的是循环结构中还包裹着循环结构, 外边的循环结构叫外循环, 里边的循环结构叫内循环.
格式:
for(初始化条件; 判断条件; 控制条件) {
for(初始化条件; 判断条件; 控制条件) {
}
}
规则:
外层控制的是行数;内层控制的列数
执行流程:
-
外循环执行一次, 内循环执行一圈.
-
循环嵌套的总执行次数 = 外循环的次数 * 内循环的次数.
例如:
-
现实世界中的年月关系, 即: 1年 = 12个月
-
现实世界中的时分, 分秒关系, 即: 1小时 = 60分钟, 1分钟=60秒.
需求**
打印99乘法表, 格式如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
public class ForForDemo08 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) { //外循环控制行
for (int j = 1; j <= i; j++) { //内循环控制列
//1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
System.out.print(j + " * " + i + " = " + i * j + "\t");
}
System.out.println(); //内循环执行结束, 意味着一行打印完毕, 记得要换行.
}
}
}
十二、综合案例
案例一:生成随机数
Math类似Scanner,也是Java提供好的API(Application Programming Interface),内部提供了产生随机数的功能. API后续课程详细讲解,现在可以简单理解为Java已经写好的代码, 我们可以直接拿来用.
格式:
Math.random(); //可以获取0.0 ~ 1.0之间所有的数据, 包左不包右.
需求:
使用Math类,生成5个1~10之间的随机整数, 并将结果打印到控制台.
public class MathDemo01 {
public static void main(String[] args) {
//1. 定义for循环, 用来获取5个随机数.
int num;
for (int i = 1; i <= 5; i++) {
//2.获取随机数, 并打印
num = (int)(Math.random()*10 + 1);
System.out.println(num);
}
}
}
案例二:猜数字
需求
-
生成一个1-100之间的随机数, 让用户来猜.
-
如果猜的数字比生成的随机数大,提示你猜的数据大了
-
如果猜的数字比生成的随机数小,提示你猜的数据小了
-
如果猜的数字与生成的随机数相等,提示恭喜你猜中了
import java.util.Scanner; public class MathDemo02 { public static void main(String[] args) { //1. 生成一个随机数让用户来猜. int guessNum = (int)(Math.random()*100 + 1); //2. 因为不知道用户多少次能猜对, 所以用while(true)死循环. int inputNum = 0; while (true) { //3. 提示用户录入猜的数据, 并接收. System.out.println("请录入您猜的数据(1-100): "); inputNum = new Scanner(System.in).nextInt(); //4. 比较用户录入的数据 和 生成的随机数是否一致, 并提示. if (inputNum > guessNum) System.out.println("您猜的数字大了!"); else if (inputNum < guessNum) System.out.println("您猜的数字小了"); else { System.out.println("恭喜您, 猜对了"); break; } } } }