Java基础知识(适合小白)
环境搭建
先来了解一下(如果不想学习理论知识就直接往后看吧):
JVM与GC的概述
JVM是Java虚拟机,可以将他理解为可运行Java字节码的虚拟计算机系统;它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信;对于不同的运行平台,有着不同的JVM。JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”
GC是垃圾回收器,GC在Java程序运行过程中自动启用,程序员无法精神控制和干预;不像C/C++,Java中的JVM提供了一种系统线程跟踪储存的分配情况。并在JVM空闲时,检查并释放那些可以释放的存储空间。
JDK与JRE
JDK是Java开发工具包,并且JDK包含了JRE与JVM。
JRE是Java运行时环境,并且JRE包含了JVM;JRE还包含了完成加载代码的类加载器,完成校验代码的字节码校验器还有执行代码的运行时解释器。
JDK的下载
这里我用的是JDK11,因为JDK11是长期版本,而JDK13不是;
下载步骤一: 访问官网:https://www.oracle.com
下载步骤二: 注册,并登录。 (国内无法正常注册,但是有时候可以)
下载步骤三: 跳转到官网下载页面: https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
下载步骤四: 选择对应版本点击下载 JDK11 安装(最下面那个也可以)
JDK的安装
安装步骤 1: 双击下发的安装包
安装步骤 2: 看图安装软件(记住自己装在了那个文件夹中,文件夹地址后续有用
安装步骤 3:配置环境变量 看图配置环境变量(WIN10,WIN7在下面)
WIN7
eclipse的安装应该挺简单,官网就有下载的,下载的时候记得找镜像,这样会快一些。
基础语法
在基础语法之前,先来说说流程控制语句
1,流程控制语句概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
2,流程控制语句分类
(1) 顺序结构
顾名思义,就是按照代码从上至下的顺序来一行一行执行代码,没有什么特殊的语法结构,在一个程序中绝大多数代码都会以顺序结构来执行。具体程序流程图如下:
(2)选择结构
选择结构,听名字也好理解,就是出现了选择,出现了分歧或者说是分支
选择分支有以下两种
if语句
if语句有三种格式
1、if类型,格式如下:
if(判断条件){
执行语句
}
如果判断条件为真(true)则执行if内的执行语句,如果判断条件为假(false)则不执行。
举个例子:
……
if(1>2){
System.out.println("你好,Java");
}
if(1<2){
System.out.println("Hello World!");
}
……
这个的输出就只会输出Hello World!
2、if-else类型,格式如下:
if(判断条件){
执行语句1
} else{
执行语句2
}
如果判断条件为真(true)则执行if内的执行语句,如果判断条件为假(false)则执行else内的语句。
举个例子
……
if(1>2){
System.out.println("你好,Java");
}else{
System.out.println("Hello World!");
}
……
这个的输出也是只会输出Hello World!
3、if-else-if类型,格式如下:
if(关系表达式1) {
执行语句1;
}else if (关系表达式2) {
执行语句2;
}
………
else {
执行语句n+1;
}
如果理解了前面的两种类型,我相信这个也不难,他会从上至下依次执行,满足那个条件就进入那个分支,并执行里面的语句。
switch
格式如下:
switch(表达式) {
case 值1:
执行语句1;
break;//break讲解在后文
case 值2:
执行语句2;
break;
……….
default:
执行语句n+1;
break;
}
执行原理和if-else-if相似,表达式和那个case的值相同就进入那个执行语句,如果找不到这个case,这就执行default里面的语句。
举个例子:
……
switch(b){
case 1:
语句1;
break;
case 2:
语句2;
break;
case 3:
语句3;
case 5:
语句4;
break;
default:
语句5;
break;
}
……
如果b == 2(Java中相等是双等号,不是打错了哈!),就会进入case 2:中去执行语句2,有的人可能注意了case 3: 中没有break,这是个例子,就是如果 b ==3 那么程序会执行语句3,这时程序没有碰见break,则程序会往下执行,进入case:5中执行语句4,有的人可能问为什么3后面是5而不是4,我想表达的是case后面的值不需要按顺序。
既然在上面看到了break,我们就来讲一下:
break和continue
作用都是“跳出”,要么就是跳出循环,要么就是跳出switch(就像上面),再来看看两者的区别(以循环为例子,不了解循环的可以先看后文,看完后,再返回来),break是跳出本层循环,而continue是跳出本次循环,有人看不懂了,这不一个意思吗,来看例子(用for):
用break:
for(int i = 0;i<10;i++){
if(i == 5){
break;
}
System.out.print(i + " ");
}
执行结果为:0 1 2 3 4
用continue:
for(int i = 0;i<10;i++){
if(i == 5){
continue;
}
System.out.print(i + " ");
}
执行结果为:0 1 2 3 4 6 7 8 9
现在应该理解了break的结束本层循环和continue的本次循环了吧!
(3)循环结构
循环语句的组成
a,初始化语句:一条或者多条语句,这些语句完成一些初始化操作。
b,判断条件语句:boolean 表达式,这个表达式能决定是否执行循环体。
c,循环体语句:这个部分是循环体语句,也就是我们要多次做的事情。
d,控制条件语句:这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
在Java中提供了三种循环语句
1、while循环、do…while循环、for循环
格式分别如下:
……
初始化语句;
while(循环条件){
循环体;//其中包含控制条件
}
……
初始化语句;
do{
循环体;
}while(循环条件)
……
for(初始化语句;判断条件语句;控制条件语句){
循环体;
}
三种循环的执行原理都一样,程序一直执行下去,如果满足循环条件,就一直会进入循环执行里面的语句,否则就结束循环。
小作业
看了这么多来练练手吧
1、计算应缴金额
商场根据会员积分打折:
2000 分以内打 9 折,
4000 分以内打 8 折,
8000 分以内打 7.5 折,
8000 分以上打 7 折,使用 if-else-if 结构,实现手动输入购物金额和积分,
计算出应缴金额
//参考解
package homework;
import java.util.Scanner;
public class T1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入购物金额和积分(用空格隔开):");
double a = in.nextDouble(),b = in.nextDouble();
while(b<0 || a<0) {
System.out.println("输入无效,请重新输入:");
a = in.nextDouble();
b = in.nextDouble();
}
if(b>8000) a = a * 0.7;
else if(b>4000) a = a * 0.75;
else if(b>2000) a = a * 0.8;
else if(b>0) a = a * 0.9;
System.out.println("最后应缴金额为" + a + "元");
in.close();//这个有人可能不知到,这个就是将前面定义的Scanner对象给释放的掉,没有这个也可以执行
}
}
2、计算该年该月天数
一年中有 12 个月,而每个月的天数是不一样的。其中大月 31 天,分别为
1,3,5,7,8,10,12 月,小月 30 天,分别 为 4,6,9,11 月。还有二月比较特殊,平
年的二月只有 28 天,而闰年的二月有 29 天,由用户在控制台输入年份和月份,
程序计算该年该月的天数。
//参考解
package homework;
import java.util.Scanner;
public class T2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入年份和月份(用空格隔开):");
int a = in.nextInt(),b = in.nextInt(),c;
if(b == 2) {
if((a%4 == 0 && a%100 != 0) || a%400 == 0) c = 29;
else c = 28;
}
else {
switch(b) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: c = 31;break;
default: c = 30;break;
}
}
System.out.println(a + "年" + b + "月有" + c + "天");
in.close();
}
}
3、打印三位数中的所有水仙花数
所谓“水仙花数”即一个整数满足其值等于各个数位的立方和。
如: 153 是一个水仙花数,因为 153= 1³+5³+3³
//参考解
package homework;
public class T5 {
public static void main(String[] args) {
for(int i = 100 ;i < 1000 ;i++) {
int a = i/100 ,b = i/10%10 ,c = i%10;
if(Math.pow(a, 3) + Math.pow(b,3) + Math.pow(c, 3) == i) {
//这里用到了pow(a,b)函数,用法就是Math.pow(a, b),表示a的b次方
//左端可以赋值,例如c = Math.pow(a, b);,但是要注意,它返回的是一个double类型。
System.out.println(i);
}
}
}
}