Java基础知识
初识Java
-
Java是高级编程语言, 是面向对象的, 静态的编程语言
-
Java中包含JDK、JRE、JVM。其中JVM是Java虚拟机。 JRE是运行环境。JDK是开发工具包
-
Java的程序结构。 总共三步。编写源代码,编译,运行
public class Demo{ public static void main(String args[]){ System.out.println("Helloworld"); } }
变量和数据类型
类型 | 名字 | 所占字节 |
---|---|---|
byte | 字节整型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
boolean | 布尔 | 1 |
char | 字符 | 2 |
不同的字节代表着所占空间的不同,那么所能表示的数据长度不同。 一般来讲,整型都是用int,小数则用double。是用float的时候需要加上f。因为默认都是double类型。 使用long需要加上l。因为默认都是int类型
public class Demo{
public static void main(String args[]){
byte a = 100;
short c = 20;
int b = 10;
long d = 10000;
float e = 10.0f;
double r = 20.0;
}
}
控制台的输入与输出
-
是什么
- 是用来接收用户通过键盘输入的数据,存放在变量中的。
-
为什么要用
- 为了接收用户给的数据,一般来说,比如注册表单(你的账号密码需要你来输入)。(当然,注册表单我们是网页吧)。
-
什么时候用
- 同上
-
怎么用
- 导入包
import java.util.Scanner;
- 创建Scanner对象
Scanner scan = new Scanner();
- 通过scan来调用他的方法接收数据。
import java.util.Scanner; public class Demo1 { public static void main(String[] args) { // 比如我这个系统需要让用户注册 // 让用户注册, 就需要用户来填写他的信息。 // 比如有账号,密码,确认密码。 // 一般账号和密码都是英文加数字, 也是字符串类型 Scanner scan = new Scanner(System.in); System.out.println("请输入你喜欢的账号名"); String username = scan.next(); System.out.println("请输入你的密码"); String password = scan.next(); System.out.println("请确认你的密码"); String rePass = scan.next(); if(password.equals(rePass)){ System.out.println("注册成功,你的账号是:"+username+"你的密码是"+password); }else { System.out.println("你的两次密码不相同请重新输入"); } } }
- 导入包
数据的运算
- 运算符,顾名思义就是用于计算的符号。
- Java 语言中的运算符
- 按功能分为:赋值运算符、算术运算符、关系运算符和逻辑运算符
- 按操作数的个数分类:单目运算符、双目运算符、三目运算符
单目运算符
-
赋值运算符 =
int num = 10 ; 他是单目的。
双目运算符
-
算术运算符
运算符 功能 示例 + 加法运算 表达式1+2计算结果为3 - 减法运算 表达式2-1计算结果为1 * 乘法运算 表达式2*2计算结果为4 / 除法运算 表达式4/2计算结果为2 % 模运算 表达式5%2计算结果为1
int num = 10+2;
int num2 = 10*2 ;
在算术运算符中, 一个符号(±*/)都需要有两个数字参数,这个叫双目
-
复合运算
public class Demo2 { public static void main(String[] args) { int a = 10 ; // ++在后面, 先使用再运算 // ++在前面, 先运算再使用 System.out.println(a++); //10 System.out.println(a); // 11 System.out.println(a++); // 11 System.out.println(a); //12 System.out.println(++a);//13 } }
-
关系运算符
- 关系运算符用于比较两个变量或表达式的值的大小关系
- 在Java 中,关系运算结果值为boolean 类型,包括“true”或“false”
运算符 | 功能 | 示例 |
---|---|---|
> | 比较大于关系 | 表达式2>1 计算结果为“True” |
< | 比较小于关系 | 表达式2<1 计算结果为“False” |
>= | 比较大于等于关系 | 表达式2>=1 计算结果为“True” |
<= | 比较小于等于关系 | 表达式2<=1 计算结果为“False” |
== | 比较相等关系 | 表达式2==1 计算结果为“False” |
!= | 比较不相等关系 | 表达式2!=1 计算结果为“True” |
int a =10 ;
int b = 10 ;
boolean check = a>b; // false
int c =20 ;
int d = 30;
boolean check1 = a<d; //true
boolean check2 = a==b ;// true
-
逻辑运算符
使用关系运算符可以比较程序中两个值的大小关系,但在程序中经常需要从多个比较关系中得到综合判断的结果。
运算符 | 功能 | 示例 |
---|---|---|
&& | 与运算,即同时成立,缺一不可 | a>b&&c>d:只有左右两个表达式的值都为true, 整个结果才为True。只要有一个表达式为false,则整个表达式为False |
|| | 或运算, 即两者中有一个成立即可 | a>b||c>d:左右两个表达式中只要有一个成立就为true,只有两个都为false才为false |
! | 非运算,取反 | !(a>b):如果表达式a>b 为false,则进行取反运算后为true;如果表达式a>b为true,则进行取反运算后为false |
三目运算符
语法:布尔表达式?表达式1:表达式2
public class Demo5 {
public static void main(String[] args) {
int age = 16;
System.out.println(age>18?"成年":"未成年");
}
}
运算符的优先级
有算数运算的, 先算术运算 。再其次是逻辑运算。
比方说: 5+10>10+5? // 我总要先把我的数字先算出来,然后才能开始比较啊。
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () | 从左到右 |
2 | !、++、– | 从右到左 |
3 | * 、/、 % | 从左到右 |
4 | + 、- | 从左到右 |
5 | > 、<、 >=、 <= | 从左到右 |
6 | ==、 != | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | = 、+=、 -=、 *=、 /=、 %= | 从右到左 |
Java中的条件结构
我们之前写的代码都是顺序结构, 顺序执行下来的。
- 选择结构又称为分支结构。
- 当程序执行到分支判断的语句时,首先判断条件,然后根据条件表达式的结果选择相应的语句执行。
- 分支结构包括单分支、双分支和多分支三种形式。
- if(boolean){代码块}
-
单分支
import java.util.Scanner; public class Demo6 { public static void main(String[] args) { // 我们需要判断用户输入的年龄,判断他是否成年 Scanner scan = new Scanner(System.in); System.out.println("请输入你的年龄"); int age = scan.nextInt(); if(age>18){ System.out.println("恭喜你成年了。 "); } } }
- 双分支
import java.util.Scanner; public class Demo6 { public static void main(String[] args) { // 我们需要判断用户输入的年龄,判断他是否成年 Scanner scan = new Scanner(System.in); System.out.println("请输入你的年龄"); int age = scan.nextInt(); boolean b = age>18; if(b){ System.out.println("恭喜你成年了。 "); }else{ System.out.println("不好意思, 你还没成年"); } } }
-
多分支
import java.util.Scanner; public class Demo7 { public static void main(String[] args) { // 多分支 // 我们需要根据年龄不同,判断他所在的年纪 // 三十而立,四十不惑,五十知天命,六十耳顺 七十随心所欲 不逾矩 // 阎王收人,不是73就是84 // 袁世凯要推翻帝制,帝制最大的掌权人,慈禧。72。 Scanner scanner = new Scanner(System.in); System.out.println("请输入你现在的年龄"); int age = scanner.nextInt(); if(age<30){ System.out.println("好好读书"); }else if(age>=30&&age<40){ // 这个年纪是而立之年 System.out.println("而立了"); }else if(age>=40&&age<50){ System.out.println("不惑了"); }else if(age>=50&&age<60){ System.out.println("知天命"); }else if(age>=60&&age<70){ System.out.println("耳顺"); }else{ System.out.println("随心所欲不逾矩"); } } }
-
嵌套if
import java.util.Scanner; public class Demo7 { public static void main(String[] args) { // 多分支 // 我们需要根据年龄不同,判断他所在的年纪 // 三十而立,四十不惑,五十知天命,六十耳顺 七十随心所欲 不逾矩 // 阎王收人,不是73就是84 // 袁世凯要推翻帝制,帝制最大的掌权人,慈禧。72 Scanner scanner = new Scanner(System.in); System.out.println("请输入你现在的年龄"); int age = scanner.nextInt(); if(age>0){ if(age<30){ System.out.println("好好读书"); }else if(age>=30&&age<40){ // 这个年纪是而立之年 System.out.println("而立了"); }else if(age>=40&&age<50){ System.out.println("不惑了"); }else if(age>=50&&age<60){ System.out.println("知天命"); }else if(age>=60&&age<70){ System.out.println("耳顺"); }else{ System.out.println("随心所欲不逾矩"); } }else{ System.out.println("小于0是什么鬼"); } } }
switch-case
public class Demo8 { public static void main(String[] args) { // switch casse // 比如说你现在要打客服电话 // 电话账单问题请按1,套餐问题请按2 , 人工服务请按0 Scanner scanner = new Scanner(System.in); System.out.println("请输入你要咨询的服务号"); int num = scanner.nextInt(); switch (num){ case 1 : System.out.println("电话账单问题"); break; case 2: System.out.println("套餐问题"); break; case 0: System.out.println("人工服务"); break; default: System.out.println("您输入的数字有误"); } } }
Java中的循环结构
比如: 我们需要打印10000张纸。那我们的代码难道要写一万次吗,所以我们需要用到循环
System.out.println("打印");
System.out.println("打印");
System.out.println("打印");
System.out.println("打印");
。。。
while
while(boolean){
代码块
}
public class Demo9 {
public static void main(String[] args) {
System.out.println("打印一万张纸");
// 在外面声明一个int i = 0 ;
int i = 1; //
while (i<=10000){ // 如果说i还没到10000,那就需要继续打印。
System.out.println("第"+i+"张纸");
i++;
}
}
}
写循环的时候会出现一些错误。
错误一:循环一次也不执行
错误二:循环执行次数错误
错误三:死循环
do while
do while 和while 相比, 他最少会执行一次
public class Demo10 {
public static void main(String[] args) {
// 比如说游戏里面的抽奖, 第一次免费。 后面收费
int i = 5;
// 条件写死,他没有充钱, 只能抽1次
do {
System.out.println("抽了第"+i+"次");
i--;
}while (i>1);
}
}
for
for(初始变量; 布尔条件;变量改变的量;){
代码块
}
break和continue
break是跳出循环
// break ;比如说我到第50的时候, 就要停止循环
for (int i = 1 ;i<=10000;i++){
System.out.println(i);
if(i==50){
break;
}
}
continu是跳过循环
// continue 比如说我只取偶数
// 也就是说,当我遇到偶数的时候, 我就不输出这个数字了
for (int i = 0; i < 100; i++) {
if(i%2!=0){
continue;
}
System.out.println(i);
}
}
Java方法
-
方法的概述
-
方法的四种类型
1. 无参数无返回值方法
public static void main(String[] args) {
sayHello();
sayHello();
sayHello();
sayHello();
}
// 无参数无返回值
public static void sayHello(){
System.out.println("Hello");
}
2. 有参数无返回值方法
public static void main(String[] args) {
// 方法是将一些重复的功能组合在一起, 以便反复调用
// 比如说我需要一个能进行两个数相加的程序
sum(10,2,10,10);
sum(50,2,10,10);
sum(100,100,10,10);
}
// 公开的 静态的 无返回值的 方法名 定义类型int a是参数,定义类型int b是参数
public static void sum (int a , int b , int c , int d ){
int sum = a+b+c+d;
System.out.println(sum);
}
3. 无参数有返回值方法
public static void main(String[] args) {
String hello = hello();
String hello1 = hello();
String hello2 = hello();
System.out.println(hello);
System.out.println(hello1);
System.out.println(hello2);
}
// 无参数但有返回值的
public static String hello(){
return "hello";
}
4. 有参数有返回值方法
public static void main(String[] args) {
int sum = cheng(5,10);
System.out.println(sum);
}
// 公开的 静态的 有返回值且类型有int 方法名 定义类型int a是参数,定义类型int b是参数
public static int cheng (int a , int b ){
int sum = a*b;
return sum;
}
方法的概述
在程序中包含比较复杂的逻辑和功能时,可以将这些功能分解为若干个子功能分别实现,而这些子功能组合在一起,便形成了完整的程序。
方法定义在类中,通过对象完成对它们的调用,最后组成整个程序。通俗的讲,程序就是各个对象对方法的调用。
数组
- 我一个变量是不是只能存一个数据,那么我有一组数据怎么办。
- 例如:班上4000位同学的分数, 我该怎么存。
int xxz = 40;
int lkd = 50;
int lbh = 60;
- 那么这时候, 我们需要有一个数据类型来存放我们一堆的数据。 用了数组之后, 只需要一个变量名就行了。
开始使用
-
声明数组
int[] nums ;
-
创建数组
nums = new int[5]; // new int[5] ,这个括号5,是规定数组的长度。也就是能存放数组里面元素的个数
-
初始化数组
就是给数组赋值
nums[0] =5; nums[1] = 4; nums[2] = 2; nums[3] = 1 ; nums[4] = 5;
-
数组的访问
public static void main(String[] args) { int[]nums ; nums = new int[5]; nums[0] =5; nums[1] = 4; nums[2] = 2; nums[3] = 1 ; nums[4] = 5; System.out.println(nums); System.out.println(nums[4]); System.out.println(nums[3]); System.out.println(nums[3]); System.out.println(nums[5]);// ArrayIndexOutOfBoundException 数组下标越界异常 }
-
如何快速输出数组
-
通过for循环
-
for (int i = 0; i < nums.length; i++) { int num = nums[i]; System.out.println(num); }
-
// 增强for循环 for (int i: nums) { System.out.println(i); }
-
-
通过Arrays.toString(数组变量)
String s = Arrays.toString(nums); System.out.println(s);
-
数组的创建方法总结
- 先声明后初始化
- 直接声明并初始化
public static void main(String[] args) { int[] nums = new int[]{1,2,3,4,5}; System.out.println(Arrays.toString(nums)); }
- 直接初始化
int[] nums = {1,2,3,4,5};
-
Java基础综合项目
实现猜字母
- 电脑会生成五个字符
- 用户也输入5个字符
- 将电脑的字符与用户输入的字符逐一比较判断
- 最后输出正确的个数
import java.util.Arrays;
import java.util.Scanner;
public class Demo17 {
/**
* 猜字符游戏
* 电脑随机生成5个字符, 玩家输入5个字符后, 进行判断正确的个数
* 写熟练后, 再继续修改
* 1. 当前的判断逻辑是比如 电脑生成 mvaxz , 假如用户输入的是zxvma ,则对了5个,但位置都不对。
* 所以需要修改能判断是否在正确位置上对的个数。
* 2. 让电脑生成的字符不重复。
* @param args
*/
public static void main(String[] args) {
// 电脑生成的方法
char[] generate = generate();
System.out.println("电脑输入的数字为:"+ Arrays.toString(generate));
// 玩家输入的方法
char[] inputs = input();
// 比较的方法
int check = check(generate,inputs);
System.out.println("恭喜你,猜对"+check+"个");
}
// 用来进行判断的方法
public static int check(char[] generate, char[] inputs) {
int a = 0 ;
for (int i = 0; i <generate.length ; i++) {
for (int j = 0; j <inputs.length ; j++) {
if(generate[i]==inputs[j]){
a++;
break;
}
}
}
return a;
}
// 用来接收用户输入的方法, 并将用户输入的字符返回给主方法
public static char[] input() {
Scanner scanner = new Scanner(System.in);
String next = scanner.next();
next = next.toLowerCase();
char[] chars = next.toCharArray();
return chars;
}
// 用来让电脑生成随机字符的方法
public static char[] generate() {
char[] chars = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char[] generate = new char[5];
for (int i = 0; i < chars.length; i++) {
if(i==5){
break;
}
double random = Math.random();
int a = (int)(random*26);
generate[i] = chars[a];
}
return generate;
}
}