Java从入门到大神(一)| 起飞~起飞~起飞~

一、Java入门

1. 打开cmd

Win + R 打开管理器,输入框输入 cmd 按下回车打开cmd窗口

2. 常见cmd命令

3. 环境变量

3.1. 配置环境变量

右击我的电脑→找到属性→高级设置→环境变量→添加Path→写入要添加的环境地址

3.2. 使用环境变量

打开cmd命令窗口→输入环境变量下地址的程序即可执行

4. jdk的安装和说明

4.1. 安装

①进入网站Oracle | Cloud Applications and Cloud Platform

②点击Products下拉菜单,进入到Java界面

③点击下载Java

④选择合适自己的版本和系统,点击第二项进行下载

⑤下载完成之后傻瓜式下一步安装就行,注意安装路径不要中文名称和空格

4.2. 目录说明

5. HelloWorld小案例

①创建文本文件,改写名称和后缀.java

②写入HelloWorld文件

public class HelloWorld{
	public static void main(String[] args){
		System.out.println("HelloWorld");
	}
}

③使用cmd命令进入到jdk的bin目录下使用javac对HelloWorld.java文件进行编辑

javac HelloWorld.java

这样之后HelloWorld.java所在文件夹下就会出现一个HelloWorld.class文件

④使用命令java HelloWorld 命令执行HelloWorld.class文件,注意命令行写文件名没有后缀

6. 配置环境变量

Java自己配置的环境变量只有四个

自己配置方便后期使用

7. notepad++软件

notepad是一个高级记事本软件,能够显示行,重要代码高亮显示

①到notepad++官网下载安装包

②中间傻瓜式安装,无需任何操作,一直下一步

③在软件,点击设置→首选项→新建,进行以下操作

8. Java的用处

Java SE

Java ME

Java EE

Java能做什么???

9. 高级语言的运行方式

C/C++语言(编译型)整体编译,然后执行

Python(解释型)按行解释然后执行

Java(混合型)虚拟机

Java跨平台的原理:①Java语言的跨平台是通过虚拟机实现的。②Java语言不是直接运行在操作系统里面的,而是运行在虚拟机中的。③针对于不同的操作系统,安装不同的虚拟机就可以了。

10. JDK和JRE

运行代码所需的东西(以下三类合称JDK,JDK是Java开发工具包):

①JVM(Java VirtualMachine):Java虚拟机,真正运行Java程序的地方

②核心类库:比如输出时所用到的static类

③开发工具:Java编译工具、Java运行工具、jbd调试工具、jhat内存分析工具......

JRE是什么,有哪些内容组成?

①JRE的Java的运行环境

②JRE包含:JVM、核心类库、运行工具

JDK包含JRE,JRE包含JVM

二、Java基础概念

1. 注释

注意:

①注释内容不会参与编译和运行,仅仅是对代码的解释说明

②不管是单行注释还是多行注释,在书写的时候都不要嵌套

public class HelloWorld{
	//叫做main方法,表示程序的主入口
	public static void main(String []args){
		// 叫做输出语句
		System.out.println("HelloWorld~??");
	}
}

2. 关键字

①关键字是Java赋予了特殊含义的英文单词

②关键字的字母全部小写

③常用的代码编辑器对关键字有特殊颜色的标记,比较直观

第一个关键字:class:用于(创建/定义)一个类,类的Java最基本的组成单元

3. 字面量

告诉程序员:数据在程序中的书写格式

制表符:在打印的时候,把前面字符串的长度补齐到8,或者8的整数倍。最少补1个空格,最多补8个空格

public class ValueDemo1{
	public static void main(String [] args){
		// 目标:掌握常见数据再代码中如何书写
		
		// 整数
		System.out.println(666);
		System.out.println(-777);
		
		// 小数
		System.out.println(1.93);
		System.out.println(-3.71);
		
		// 字符串
		System.out.println("KissFeng");
		
		// 字符
		System.out.println('s');
		
		// 布尔
		System.out.println(true);
		System.out.println(false);
		
		// 空(空不能直接打印,若要打印,可以用"null")
		System.out.println("null");
	}
}
public class ValueDemo1{
	public static void main(String [] args){
		// 目标:掌握制表符的用法
		// "\t"把前面字符串的长度补齐到8
		System.out.println("name" + "\t" + "age");
		System.out.println("Tom" + "\t" + "20");
	}
}

4. 变量

4.1. 知识点

变量:在程序的执行过程中,其值有可能发生改变的量(数据)

定义方法:数据类型 变量名 = 变量值

public class VariableDemo2{
	public static void main(String [] args){
		// 1.变量基本用法:定义输出
		int a = 10;
		System.out.println(a);
		
		// 2.变量参与计算
		int b = 30;
		int c = 20;
		System.out.println(b + c);
		
		// 3.修改变量记录的值
		a =  50;
		System.out.println(a);
	}
}

注意:

①只能存一个值

②变量名不允许重复定义

③一条语句可以定义多个变量

int d = 100, e = 200, f = 300;
System.out.println(d);	// 100
System.out.println(e);	// 200
System.out.println(f);	// 300

④变量在使用之前一定要进行赋值

int g;
System.out.println(g);		//报错

⑤变量的作用域范围

4.2. 练习

public class VariableTest{
	public static void main(String [] args){
		//一开始没有乘客。
		int count = 0;
		//第一站:上去一位乘客
		count += 1;
		//第二站:上去两位乘客下来一位乘客
		count += 2;
		count -= 1;
		//第三站:上去两位乘客,下来一位乘客
		count += 2;
		count -= 1;
		//第四站:下来一位乘客
		count -= 1;
		//第五站:上去一位乘客
		count += 1;
		//请问:到了终点站,车上一共几位乘客
		System.out.println(count);		// 3
	}
}

5. 计算机数据存储

计算机中任意的数据都是以二进制的形式来存储的。

常见的进制:

二进制:由0和1组成,代码中以0b开头

十进制:由0~9组成,前面不加任何前缀

八进制:由0~7组成,代码中以0开头

十六进制:由0~9还有a~f组成,代码中以0x开头

Text文本:二进制、码表

Image图片:通过每一个像素中的RGB三原色来存储

分辨率,像素,三原色

Sound声音:对声音的波形进行采样存储

6. 数据类型

要注意:先定义后输出,定义long、float要在整型结尾加上L、F

public class VariableDemo2{
	public static void main(String [] args){
		// byte
		byte b = 10;
		System.out.println(b);
		// short
		short s = 200;
		System.out.println(s);
		// int
		int i = 1000;
		System.out.println(i);
		// long
		// 定义long类型的数据,需要在结尾加上L(大写小写都行)
		long n = 9999999999L;
		System.out.println(n);		// 输出时候不显示L
	}
}

整数和小数取值范围大小关系:double>float>long >int >short > byte

7. 标识符

7.1. 命名规则

硬性要求:

软性建议:

8. 键盘录入

9. IEDA的讲解

三、运算符

1. 算数运算符

2. 隐式转换和强制转换

2.1. 隐式转换

隐式转换的两种提升规则:

①取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算

②byte short char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算

2.2. 强制转换

3. 字符串加操作

第二个重点看

char类型的数据在运算的时候,都会直接先提升为int,然后再进行运算

4. 逻辑运算符

5. 三元运算符

6. 原码反码补码

第一个1表示负数,0表示正数

正数就是正常的二进制数字

反码出现的目的:

为了解决原码不能计算负数的问题而出现的。

反码的计算规则:

正数的反码不变,负数的反码在原码的基础上符号位不变,数值取反,0变1,1变0

反码的弊端:

负数运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。

补码出现的目的:

为了解决负数计算时跨0的问题而出现的。

补码的计算规则:

正数的补码不变,负数的补码在反码的基础上+1。另外补码还能多记录一个特殊的值-128,该数据在1个字节下,没有原码和反码

补码的注意点:

计算机中的存储和计算都是以补码的形式进行的。

7. 其他运算符

逻辑与(全为1则为1)

逻辑或(只要有1就是1)

左移(低位补0)相当于乘2的移动的次方

右移(高位补0或1)相当于除以2的移动的次方

8. 键盘录入

8.1. 第一套体系

nextInt();接收整数

nextDouble();接收小数

next();接收字符串

ps:遇到空格,制表符,回车就停止接收,这些符号后面的内容不会接收了,如果有空格,会给下一次输入的内容赋值,就不需要下一次录入了

8.2. 第二套体系

nextLine();接收字符串

ps:可接收空格,制表符,遇到回车才停止接收

两种体系不宜混用,会出现问题,因为第一套体系中遇到回车停止,这个对象就结束了,不会再执行第二体系中的方法,如果是空格,则空格及其以后的数据赋值给第二体系

8.3. 两套体系同时使用解决方案

创建两个对象,一个对象使用第一个体系, 一个对象使用第二个体系可以避免这个问题的出现

四、判断和循环

1. 条件语句

格式:
if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
} 
…
else {
    语句体n+1;
}

2. switch语句

switch (表达式) {
	case 1:
		语句体1;
		break;
	case 2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;
}

扩展知识:

  • default的位置和省略情况:default可以放在任意位置,也可以省略
  • case穿透:不写break会引发case穿透现象

JDK12以后版本新增特性:自动包含break,如果有多条语句需要用到花括号。

int number = 10;
switch (number) {
    case 1 -> System.out.println("一");
    case 2 -> System.out.println("二");
    case 3 -> System.out.println("三");
    default -> System.out.println("其他");
}

case多个数据:

import java.util.Scanner;
public class test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期:");
        int day = sc.nextInt();
        switch (day) {
            case 1,2,3,4,5 -> System.out.println("工作日");
            case 6,7 -> System.out.println("休息日");
            default -> System.out.println("不存在");
        }
    }
}

3. for循环while循环

public class test2 {
    // 回文数字
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整型:");
        int a = sc.nextInt(), num = 0;
        int n = a;
        while (a != 0) {
            int ge = a % 10;
            a = a / 10;
            num = num * 10 + ge;
        }
        System.out.println("判断" + a + "是否为回文数字的结果为:" + (num == n));
    }
}

两种无限循环:

for (; ; ) {}
while (true) {}

4. 流程控制关键字

continue:跳过本次循环,继续执行下次循环。

break:结束整个循环,直接跳出循环。

public class random {
    public static void main(String[] args) {
        Random r = new Random();
        int a = r.nextInt(0, 100);
        Scanner sc = new Scanner(System.in);
        int count = 0;
        while (true) {
            System.out.println("请输入你猜的数字:");
            int b = sc.nextInt();
            count++;
            if (a > b) {
                System.out.println("猜小了");
            } else if (a < b) {
                System.out.println("猜大了");
            } else {
                System.out.println("猜中了, 猜了" + count + "次");
                break;
            }
        }
    }
}

五、数组

1. 概述和静态初始化

数组的静态初始化:

int[] a = new int[]{1,2,3,4,5};
double[] b = new double[]{1.1, 2.2, 3.3};

//简化之后
int[] a = {1,2,3,4,5};
double[] b = {1.1, 2.2, 3.3};
String[] s = {"Python", "C++", "Java", "Go"};

2. 数组的地址和元素访问

用 数组名.length 的方式获取一个数组的长度,也就是元素的个数

public class arraydemo1 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

idea快速生成:数组名.fori + 回车 生成

若是想要删除数组中的一个元素,则 数组名[索引] = null 即可完成删除

3. 动态初始化

先创建这个数组,然后再添加数据

public class arraydemo2 {
    public static void main(String[] args) {
        String[] arr = new String[10];
        arr[0] = "a";
        arr[1] = "b";
        System.out.println(arr[0]);	// a
        System.out.println(arr[1]);	// b
        System.out.println(arr[2]);	// null
    }
}

数组默认初始化值的规律:

//整数类型:默认初始化值0

//小数类型:默认初始化值0.0

//字符类型:默认初始化值 '/u0000' 空格

//布尔类型:默认初始化值 false

//引用数据类型:默认初始化值 null

public class test1 {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        for (int i = 0, j = array.length - 1; i < j; i++, j--) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println("array[" + i + "] = " + array[i]);
        }
    }
}
import java.util.Random;

public class test2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int x= r.nextInt(arr.length);
            int temp = arr[i];
            arr[i] = arr[x];
            arr[x] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

4. 数组的内存图

栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行

堆:存储对象或者数组,new来创建的,都存储在堆内存

方法区:存储可以运行的class文件

本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关

寄存器:给CPU使用,和我们开发无关

六、方法

1. 方法的定义和调用

1.1. 概念

1.什么是方法?

方法是程序中最小的执行单元,

2.实际开发中,什么时候用到方法?

重复的代码、具有独立功能的代码可以抽取到方法中。

3.实际开发中,方法有什么好处?

可以提高代码的复用性

可以提高代码的可维护性

1.2. 定义

2. 方法的重载

在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。

每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系

public class test1 {
    public static void main(String[] args) {
        // 1.定义byte型的变量再进行使用
        byte a = 10;
        byte b = 20;
        compare(a, b);
        // 2.强制转换int型进行使用
        compare((int) a, (int) b);
    }
    public static void compare(short b1, short b2) {System.out.println("byte");}
    public static void compare(int b1, int b2) {System.out.println("int");}
    public static void compare(long b1, long b2) {System.out.println("long");}
}

3. 方法的练习

public class test2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println("情况:" + Test(1, arr));
    }
    public static boolean Test(int i, int[] j) {
        for (int i1 = 0; i1 < j.length; i1++) {
            if (i == j[i1]) return true;
        }
        return false;
    }
}
public class test3 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};
        int[] arr2 = copyArray(arr, 5, 8);
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
    }
    // 返回值类型是一个整型的数组   参数:数组  从第几个开始  到第几个结束
    public static int[] copyArray(int[] arr, int start, int end) {
        int[] newArr = new int[end - start + 1];  // +1是为了包前包后
        for (int i = start, j = 0; i <= end; i++, j++) {
            newArr[j] = arr[i-1];
        }
        return newArr;
    }
}

4. 方法调用的基本内存原理

先进栈的后出栈;后进栈的先出栈;

每完成一个方法,就将该方法进行出栈操作;

5. 基本数据类型和引用数据类型

七、综合练习

1. 五位验证码

import java.util.Random;
public class test1 {
    public static void main(String[] args) {
        // 创建一个动态字符数组
        char[] chs = new char[52];
        // 在动态数组中添加数据
        for (int i = 0; i < chs.length; i++) {
            if (i <= 25) {
                chs[i] = (char) ('a' + i);
            }else {
                chs[i] = (char) ('A' + i - 26);
            }
        }
        // 取出四个随机字符型数组
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int x = r.nextInt(chs.length);
            System.out.print(chs[x] + " ");
        }
        // 取出一个0~9的数字
        int y = r.nextInt(0, 10);
        System.out.print(y);
    }
}

2. 双色球彩票系统

import java.util.Random;
public class test3 {
    public static void main(String[] args) {
        int[] arr = createArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    // 生成数组
    public static int[] createArray() {
        int[] arr = new int[7];
        Random r = new Random();
        int i = 0;
        // 在1~33的红球中抽6个,不重复
        while (i < arr.length - 1){
            int num = r.nextInt(1, 34);
            // test函数去重
            if (test(num, arr)) {
                arr[i] = num;
                i++;
            }
        }
        // 在1~16个蓝球中抽1个
        int seven = r.nextInt(1, 17);
        arr[6] = seven;
        return arr;
    }
    // 判断整型是否在数组中
    public static boolean test(int i, int[] arr) {
        for (int j = 0; j < arr.length; j++) {
            if (i == arr[j]) return false;
            }
        return true;
        }
}
  • 33
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值