Java基础知识
概述
Java是1995年Sun公司发布,如今被Oracle收购
下载安装Java时从Oracle官网下载,最好下载LTS长期维护版本。Java8,Java11,Java17
Java是一门半编译半解释的面向对象语言
由于Java虚拟机JVM的存在,可以全平台运行。
Java程序运行过程
public class Test{
public static void main(String[] ars){
System.out.println("Hello world");
}
}
编辑的是.java文件,称为源文件。通过javac命令进行编译,生成同名的 .class字节码文件,再虚拟机上解释该文件运行。
Java的分类
-
JavaSE
-
JavaEE
-
JavaME
JavaME称为Java微型版,用于开发移动应用,早期的塞班系统中会使用,如今已经淘汰
JavaSE称为Java标准版,是java的核心和基础,也是JavaME和JavaEE的核心。可以用于开发桌面端程序。如IDEA就是用java开发的。
JavaEE称为Java企业版,用于开发WEB应用。Java 的留下全靠JavaEE。WEB应用如门户网站、电子商务、电子政务等服务器都是由JavaEE实现。
Java为什么流行
java是一门“半解释半编译”的“面向对象”语言
java有很多优点,尤其是这几点:
-
简单
-
安全
-
开源
-
多线程
-
半解释半编译
-
面向对象
Java能够跨平台运行的原理
Java有一个最大的特点就是跨平台:“一处编译,处处运行”。
Java有一个核心:JVM,Java Virtual Machine称为Java虚拟机,它用于解释Java的字节码文件。
在不同的平台上,安装JVM后,就能解释当时编译的字节码文件。
开发人员在编辑Java代码后,会保存为.java的源文件,
将源文件金国编译后,会生成。class的字节码文件,
由JVM解释字节码文件。
安装Java后,会安装JVM和JRE。
JDK和JRE
JDK全程Java开发工具包Java Development Kit。包含了JRE,Java的调试、编译等工具。
JRE全程Java运行环境Java Runtime Environment。包含了JVM,java运行工具等。
(jdk(jre(jvm)))
第一个Java程序
public class Main {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
Java程序的运行流程
编辑.java源文件——》javac命令编译——》生产.class文件——》java命令由JVM解释运行
集成开发环境IDE
Integrated Development Environment
集成了编辑源代码、调试、运行等功能的工具称为IDE。
Java的IDE有很多,如Eclipse、MyEclipsse、STS、IDEA等都是集成开发环境。
当前的主流是IDEA。
Java程序中的注意事项
- 要写代码,必须想创建class,class称为类,是一个java程序的基本组成单位
- 每个能够运行的java程序,有且只有一个main方法,称为主方法/入口函数,是程序的启动
- 符合
- Java中的符号全部都是英文状态下的符号,可以在输入法中设置中文状态使用英文标点
- “{}”必须成对出现。用于定义类、定义方法和定义代码块
- “[]”必须成对出现。用于定义数组、使用数组
- “()”必须成对出现。用于表示方法的参数
- “空格”用于分割关键字和代码。可以是一个空格,也可以是多个
- “.”用于调用某个类或对象的属性和方法
- “;”用于表示一句代码的结束,大括号后不需要加分号
- 换行和缩进
- 在每出现一次大括号时,就要进行一次缩进
Java程序中的注释
注释可以对代码进行解释说明或屏蔽不用的代码。 编译时无视注释,注释分为
- 单行注释 快捷键:ctrl + /
//123
- 多行注释 快捷键:ctrl + shift + /
/* 123
123
123
*/
- 文档注释
/**
* 文档注释
* 通常用于解释整个java类或某个方法或某个变量,
* 最终可以通过java命令自动生成文档
*/
IDEA快捷键
ctrl+X 删除一行
ctrl+shift+f10 运行
ctrl+shift+方向键 移动选中的代码块
变量.sout 回车 快捷输出
ctrl+alt+L 调格式
条件 . if 快速生成if
IDEA在粘贴多行字符时自动转义符换行加拼接
编程语言的命名规则
- 驼峰命名法
如果用多个单词描述一个内容,除首字母外,其他单纯首字母大写。
如studentsName、empId
- 帕斯卡命名法
使用单词首字母去全部大写
Java中的标识符
Java中的英文、方法名和变量名称统称为标识符。
- 类名使用帕斯卡命名法
- 方法名和变量名使用驼峰命名法
- 命名时做到“见名知意”
非强制性,约定俗成的内容
Java中标识符的命名规则
- 标识符使用字母、数字、下划线和$组成
- 不能以数字开头
- 不能使用Java中的关键字(保留字)
强制要求,无法编译
Example:
-
类名 Test Person Animal Cat UserController StudentService
-
变量名 age lastName firstName
-
方法名 login() findEmpById(int id)
-
常量 COUNTRY_NAME
Java中的数据类型
Java中分为两大数据类型:原始(基本)类型和引用类型
原始类型
-
整型
1Byte=8bit 00000000~11111111 256
- byte
- short
- int
- long
-
浮点型
- float单精度浮点型,赋值时在数字后加f或F
- double双精度浮点型
-
字符型
- char,赋值时可以用单引号引起来的字符或一个数字,或是数字ascii中的数字或者是一个转义字符ascii码(\t、\n)
转义字符
\t
\n 换行
\"
\'
\b 退格
\r 回车
\\ 字符“\”
\0 null
- 布尔型
boolean
类型名 | 所占字节大小 | 范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2,147,483,648~2,147,483,647 |
long | 8字节 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
float | 4字节 | |
double | 8字节 | |
char | 2字节 | 单引号的一个字符 |
boolean | true/false |
再程序中直接写出的整数默认是int类型
再程序中直接写出的小数默认是double类型
原始类型之间的数据类型转换
- 隐式类型转换(自动)
- 整型数据可以直接保存到浮点型中
占用字节小的数据类型的变量,可以直接保持到占用字节大数据类型的变量中
short s=123;
int i=s;
- 显示类型转换
占用字节大的数据类型的变量,默认无法保持到占用字节小的数据类型的变量中,
如果要强制保存,需要强制类型转换。
语法:(目标类型)带转换的变量
int num=123;
byte a=(byte)num;//未超出范围,结果无误
byte a=(byte)128;//超出范围,溢出-128
引用类型
- 类
- 接口
- 数组
变量
在内存中的一块数据。由于这块区域数据可以发生变化,所以称为变量。
内存中的变量,相当于酒店中的房间。房间的类型就是变量的类型,房间的房号就是变量的名称,房间中住的人就是变量的值。
定义变量,就是在内存中申请一块想要数据类型的空间,并对其命名的过程。
定义变量
语法:数据类型 变量名;
如果要同时定义多个相同类型的变量,可以写作做: 数据类型 变量名1, 变量名2.。。;
如
//年龄
int age=18;
//年月日
int year;
int month;
int day;
int a,b,c;
//利率
double interestRate;
//电话号码
String phoneNumber;
给变量赋值
语法:变量名 = 值;
int i;
i=10;
变量初始化
语法:数据类型 变量名 = 值;
如果在定义变量的时候能确定其中保存的数据,可以直接在定义变量的时候赋值。
将定义变量和给变量赋值
int i =19;
变量注意事项
-
在一对大括号中变量只能出现一次
-
给变量赋值是,赋值符号“=”左边通常是一个变量名,右边可以是一个具体值也可以是另一个赋了值的变量名(不超出其范围),再可以是一个表达式(不超出其范围)。
-
如果同时定义多个类型系统的变量,可以只写一个数据类型
-
必须以字母、下划线、或者美元符$开头;以美元符$ 开头命名的变量虽然能够编译通过但是不建议使用;
-
中文也可以作为命名开头且编译也能通过,但是不建议使用。
-
除开头外后面的部分可以有字母、下划线、美元符$以及数字组成;
-
虽然变量名不限制长度,但能表达清楚命名的含义即可;
-
变量名不可以和java的关键字冲突;
-
再命名中大小写是又区别的,即使由同一个单词命名但是有个别字母的大小写的区别,产生的就是两个不同的变量。
int a=1,b=2,c=3,d=4,e=5,f=6;
作业
定义变量表示一个小写字母,输出它的大写形式
如定义char word=‘q’,输出Q
import java.util.Scanner;
public class Work01 {
public static void main(String[] args) {
System.out.print("请输入一个小写字母:");
Scanner scanner = new Scanner(System.in);
String b = scanner.next();
char c = b.charAt(0);
System.out.println((char) (c-32));
}
}
控制台输入圆的半径,计算圆的周长和面积并输出
如输入2,输出周长:xxxx,面积:xxxx
Scanner scanner = new Scanner(System.in);
System.out.print("请输入输入圆的半径:");
int a = scanner.nextInt();
System.out.println("周长为:"+Math.PI*2*a+"面积为:"+a*a*Math.PI);
控制台输入3个数,输出最大值、最小值、总和和平均值
如输入1,2,2,输出最大为2,最小为1,总和为5,评价为1.7
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数:");
int a = scanner.nextInt();
System.out.print("请输入第二个数:");
int b = scanner.nextInt();
System.out.print("请输入第三个数:");
int c = scanner.nextInt();
int max = a > b ? a:b;
max = max > c ? max: c;
int min = a > b ? b:a;
min = min > c ? c: min;
int sum=a+b+c;
float svg=(float) sum/3;
System.out.println("Max:"+max+"min:"+min+"sum:"+sum+"svg:"+svg);
控制台输入1个4位数,输出所有数之和
如输入3257,输出17
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个四位数:");
int a = scanner.nextInt();
int ge = a%10;
int shi = a/10%10;
int bai = a/100%10;
int qian = a/1000;
System.out.println(ge+shi+bai+qian);
控制台输入金额,根据金额输出吃什么
如输入10,输出吃小面
Scanner scanner = new Scanner(System.in);
System.out.println("小面10¥;抄手11¥;饺子12¥;炒饭13¥");
System.out.println("您想要吃什么呢?");
String a = scanner.next();
if (a.equals("小面")) {
System.out.println("收费10¥");
} else if (a.equals("抄手")) {
System.out.println("收费11¥");
} else if (a.equals("饺子")){
System.out.println("收费12¥");
} else if (a.equals("炒饭")){
System.out.println("收费13¥");
}
用空格切分字符串并输出
Scanner scanner = new Scanner(System.in);
System.out.print("请输入输入:");
String a = scanner.nextLine();
String [] arr = a.split("\\s+");
System.out.println(arr.toString());
for(String ss : arr){
System.out.println(ss);
}