• javabasic


    计算机基础

    一、学前知识

    1. 计算机组成

    2. 进制的概念

    (1)二进制的存储

    计算机不管是内存还是硬盘,都是以二进制的形式存储。如同一张巨大的表格,里面都是由0和1组成。

    • 二进制:逢2进1 基数为2,数值部分用不同的数字,0、1来表示。 (逢2进1便是没有2的概念,遇到2就像前面进一位)比如2,看到2向前进1,2用二进制表示便是10,3是11依此类推
    • 十进制:逢十进一基数为10,数值部分用0、1、2、3、4、5、6、7、8、9来表示.
    • 十六进制:逢十六进一基数是16,有十六种数字符号,除了在十进制中的0至9外,还另外用6个英文字母A、B、C、D、E、F来表示十进制数的10至15。
    (2)二进制的存储(单位)

    数据在计算机底层是如何存储的?

    • 都是采用二进制:使用0、1按照逢2进1的规则表示数据来存储。

    如何快速算出一个数据的二进制形式?

    • 除2取余法 6便表示为110

    数据在计算机底层存储的最小单位是什么?

    • 字节,一个字节等于8个二进制位:1B =8b

    二进制转十进制

    (3)关于ASCll编码表

    二、初识java

    三、java环境搭建

    1.安装java

    将给定的安装包安装在电脑上,我们一起去官方网站看看(https://www.oracle.com/

    我们能看到目前java的版本已经更新到了java17,但是企业中常用的还是java8,原因是因为老的版本,更加稳定,不容易出现错误。我们可以根据实际需求自行选择安装版本。

    系统会默认将jdk安装至"C:\Program Files\Java"目录下,(这里最好自己指定目录,目录中不要出现空格以及中文,避免后续产生不必要的麻烦)

    接着我们需要配置环境变量,让其能够在任意窗口打开
    path环境变量

    • 用于记住程序路径,方便在命令行任意路径启动程序

    我在最初学习时,也一直没弄懂环境变量是干嘛的,我们以QQ为例,再引入java的环境变量。帮助大家去直观的理解环境变量。

    win+r 输入cmd 打开命令行窗口

    image.png

    我们此时输入qq是没有效果的

    首先找到QQ程序的执行路径,通常在bin包,发现有qq程序

    image.png
    将这个路径复制
    打开环境变量设置

    image.png

    用户变量只针对当前用户
    系统变量针对所有用户

    点击path

    image.png

    将qq环境变量加进去 点击确定

    此时再次在命令行执行qq,你会发现

    image.png
    还是失败!!!

    为什么呢?

    • 因为我们的环境变量更改之后,原来打开的命令行还没有生效,重新打开命令行工具即可。
      此时输入qq,启动成功

    image.png

    image.png

    接着我们引入正题,配置java环境变量
    在最新版本,安装过程中会自动帮助我们配置好环境变量。
    但是通常情况下,是需要我们手动添加环境变量

    image.png

    同样的 找到jdk的bin目录,复制路径,添加到环境变量中

    image.png

    图A
    image.png

    配置JAVA_HOME环境变量

    image.png

    image.png

    复制这个路径

    image.png

    新建环境变量

    image.png

    image.png

    image.png

    将最开始图A的那个变量替换,通过%JAVA_HOME% 来固定位置

    image.png

    完成

    java
    java -version   --查看jdk版本 
    
    • 1
    • 2

    有内容即可。

    2.javac 和java的区别

    我们编写的java程序都是高级语言,计算机底层是不能够直接识别的,需要通过javac工具的编译才能驱动机器干活。

    3.命令行常用命令

    四、编写第一个java程序

    开发一个java程序,其中要经历三个步骤 编写代码,编译代码,运行代码

    下面看一个简单的 Java 程序,它将输出字符串 Hello World

    最初学习时,我们可以使用记事本编写代码。这样的好处是,能够更加熟悉Java的一个运行过程,以及对代码的熟练度。

    新建一个文件,用记事本的方式打开

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello world!");  //这句话输出 Helllo world!
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    需要注意的是文件名要和类名完全一致,否则会报错。

    编写好之后通过在文件所在目录执行 javac HelloWorld.java 进行编译,然后运行

    五、java工作原理jdk

    1.jdk的组成

    2.java的跨平台,工作原理

    • 一次编译,处处可用(核心是因为java公司为不同的平台提供了jvm虚拟机)

    ## 变量

    数据类型

    1.自动类型转换机制:

    • 类型范围小的变量,可以直接复制给类型范围大的变量

    2.我们为什么要进行类型转换?

    • 因为在实际编写程序中,会存在不同类型的变量赋值其他类型的变量。

    3.什么是自动类型转换?

    • 类型范围小的变量,可以直接赋值给类型范围大的变量。

    byte 的运算结果会转换为int,需要用int接收

    数组

    1.数组的基本概念

    有一个需求,某某学校招生了,有一百个学生报名,我想记录一下这一百个学生的年龄和姓名,或者计算一下学生的平均年龄,难道我们要定义一百个变量吗?

    string a = "杨航"
    ...
    算了不写了。
    
    • 1
    • 2
    • 3

    合理的做法一定是,在内存里找一个片空间,按顺序存起来。其实这个道理很简单,计算机中,我们有这样一种数据结构能帮助我们把想同类型的数据统一聚拢放在一起,他就是【数组】。

    2.数组的定义方式

    定义:
    int[] nums;
    初始化:
    nums = new int[3];
    赋值:
    nums[0] = 1;   
    nums[1] = 4;
    nums[2] = 3;
    
    // 直接定义初始化并赋值
    int[] nums = {1,2,3};
    
    // 这样写也行
    int nums[] = new int[5];
    int nums[] = new int[]{1,2,4,5};
    
    // 数组有一个属性,可以获得数组的长度
    nums.length 
    
    类型[] 名字 = new 类型[长度];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3.数组在计算机中的基本原理

    数组在计算机中存储,主要是通过三个步骤

    image.png

    image.png
    注意:数组变量名中存储的的是数组在内存当中的地址,数组是一种引用数据类型。
    总结:

    image.png

    4.数组中的访问

    语法:数组名[索引]

    System.out.println(ages[0]);

    计算数组长度(存放了多少数据)
    数组名.length

    System.out.println(ages.length);

    数组的最大索引:

    数组名.length - 1

    注意:如果访问数组时,使用的索引超过数组的最大索引,会越界,显示异常

    5.数组的遍历

    什么是便历:?
    所谓便历,就是说一个一个去访问属猪容器中的数据

    for (int i = 0; i < ages.length; i++) { }

    IDEA中的快捷便历

    数组名.fori + 回车 直接生成

    image.png

    一个简单的小案例~

    image.png

    代码实现:

    public class LiteralDemo {
        public static void main(String[] args) {
            //定义一个五个员工的销售额度数组
            int[] money = {16,26,366,100};
            //定义一个变量,用作最后计算总额
            int total = 0;
            //分别遍历累加
            for (int i = 0; i < money.length; i++) {
                total += money[i];
            }
            //输出
            System.out.println(total);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6.动态初试化数组

    先初试化int[] rar = new int[3]
    后赋值
    rar[0]=1

    image.png

    image.png

    两种数组定义初始化方式各自适合什么模式?

    • 动态初试化:适合开始不确定具体元素值,只知道元素个数的具体场景。
    • 静态初试化:明确具体元素值

    案例1:
    image.png

    代码实现:

    import java.util.Scanner;
    public class LiteralDemo {
        public static void main(String[] args) {
            double[] scores = new double[6];
            Scanner sc =   new Scanner(System.in)//遍历数组 输入6个评委的打分
            for (int i = 0; i < scores.length; i++) {
                System.out.println("请您输入当前第"+(i+1)+"个评委的分数");
                scores[i] = sc.nextDouble();
            }
    
            double sum = 0;
            //  遍历数组中每个元素值进行求和
            for (int i = 0; i < scores.length; i++) {
                sum +=scores[i];
            }
    
            System.out.println("选手最终得分" + (sum / scores.length));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image.png

    7.数组/java程序在计算机中的执行原理

    java内存分配介绍

    方法区
    栈内存
    堆内存

    image.png

    数组在计算机的执行原理

    image.png

    小思考:

    image.png

    8.多个变量指向同一个数组

    image.png

    注意:如果某个数组变量存储的地址是null,那么变量将不再指向任何数组对象。

    多个数组变量,指向同一个数组对象的原因,注意事项

    • 多个数组中存储的是同一个数组对象中的数据
    • 多个变量中修改的都是同一个数组对象中的数据。

    9.数组常见案例

    数组求最值

    image.png

    代码实现:

    public class LiteralDemo {
        public static void main(String[] args) {
            int[] faceScores = {15,9000,29993,3242,4242,5242,4345,543,534,543,543};
            //定义一个最大值
            int max = faceScores[0];
    
            for (int i = 0; i < faceScores.length; i++) {
                if(faceScores[i] > max) max = faceScores[i];
            }
    
            System.out.println("当前妹纸中,颜值得分最高的是" + max +"分");
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    数组反转

    image.png

    public class LiteralDemo {
        public static void main(String[] args) {
            int[] a = {1,2,3,4,5}; 
            //临时变量
            int temp;
            for (int i = 0,j = a.length-1; i < j; i++,j--) {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+" ");
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    随机排名

    image.png

    代码实现:

    import java.util.Random;
    import java.util.Scanner;
    public class LiteralDemo {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            //初始化数组
            int[] codes = new int[5];
    
            //遍历录入
            for (int i = 0; i < codes.length; i++) {
                System.out.println("请您输入第" + (i+1) + "个工号");
                int code = sc.nextInt();
                codes[i] = code;
            }
            Random r = new Random();
            //打乱顺序
            for (int i = 0; i < codes.length; i++) {
                //随机索引
                int index = r.nextInt(codes.length);//0 1 2 3 4
                //定义临时变量
                int temp = codes[index];
                codes[index] = codes[i];
                codes[i] = temp;
            }
            for (int i = 0; i < codes.length; i++) {
                System.out.print(i+" ");
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    debug工具的使用-断点调试

    image.png

    方法

    1.方法的概念

    方法是一种语法结构,它可以把一段代码封装成一个功能,以便于复用。

    方法定义方式

        public static int sum(int a,int b){
            int c = a+b;
            return c;
        }
    
    • 1
    • 2
    • 3
    • 4

    调用
    sum(10,20)

    image.png

    image.png

    使用方法的好处

    • 提高代码复用性,提升开发效率
    • 让程序逻辑更清晰

    2.方法的设计

    image.png

    image.png

    image.png

    3.方法在计算机的执行原理

    方法被调用的时候,是进入到栈内存中运行。

    栈:先进后出,类似于手枪弹夹,先进去的后出,后进、去先出。打出去就没了。

    image.png

    image.png

    image.png

    4.java参数的传递机制 (非常重要)

    java的传递机制都是:值传递

    所谓值传递:指的是传输实参给方法的形参的时候,传递的是实参变量中存储值的副本。

    • 实参:在方法内部定义的量
    • 形参:定义方法时,()中所声明的参数

    image.png

    image.png

    总结:

    • 值传递,传输的是实参存储的值副本

    5.引用类型的参数传递

    image.png

    案例1:
    在这里插入图片描述
    代码:
    在这里插入图片描述
    案例2
    在这里插入图片描述
    代码:
    在这里插入图片描述
    思维:层层拦截,不通过就返回false

    6.方法重载

    什么是方法重载?

    • 方法重载指:一个类中,出现多个方法名称相同,但他们形参列表是不同的,那么这些方法就成为方法重载了。

    方法重载的的注意事项:

    • 一个类中,只要一些方法的名称相同,形参列表不同,那么他们就是方法的重载了,其它不用管。
    • 形参的列表不同指个数、类型、顺序不同,不关心形参

    方法重载的应用场景:

    • 开发中我们经常需要为处理一类业务,提供多种解决方案

    JDBC

    1.JDBC简介

    • JDBC 就是使用Java语言操作关系型数据库的一套API

    JDBC 本质:
    官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这套接口,提供数据库驱动jar包
    我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

    JDBC 好处:
    各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
    可随时替换底层数据库,访问数据库的Java代码基本不变

    在这里插入图片描述

    2.JDBC快速入门

    步骤:
    在这里插入图片描述

    /*
    JDBC快速入门
     */
    public class JDBCDemo {
        public static void main(String[] args) throws Exception {
            //1. 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接
            String url = "jdbc:mysql:///db1";
            String username = "root";
            String password = "***";
            Connection conn = DriverManager.getConnection(url, username, password);
    
            //3.定义syl语句
            String sql = "update stu set name=\"小八\" where id =2";
            //4. 执行sql的对象
            Statement statement = conn.createStatement();
            //5.执行sql
            int count = statement.executeUpdate(sql);
    
            //6.处理结果
            System.out.println(count);
            
            // 7.释放资源
            statement.close();
            conn.close();
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3.JDBC API详解

    DriverManager
    注册驱动

    Class.forName("com.mysql.jdbc.Driver");
    
    • 1

    Diver类原码
    在这里插入图片描述
    获取连接

    Connection conn = DriverManager.getConnection(url, username, password);
    
    • 1

    参数

    语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2
    • 1
    示例:jdbc:mysql://127.0.0.1:3306/db1
    
    • 1

    细节:
    如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
    配置 useSSL=false 参数,禁用安全连接方式,解决警告提示

    Connection
    1.

     //执行sql的对象
            Statement statement = conn.createStatement();
            //5.执行sql
            int count = statement.executeUpdate(sql);
    
    • 1
    • 2
    • 3
    • 4

    2.事务管理

    • mysql事务管理
      开启事务:BEGIN; / START TRANSACTION;
      提交事务:COMMIT;
      回滚事务:ROLLBACK;
      MySQL默认自动提交事务
    • JDBC 事务管理:Connection接口中定义了3个对应的方法
      开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
      提交事务:commit()
      回滚事务:rollback()

    代码演示

    public class JDBCDemo {
        public static void main(String[] args) throws Exception {
            //1. 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接
            String url = "jdbc:mysql:///db1";
            String username = "root";
            String password = "***";
            Connection conn = DriverManager.getConnection(url, username, password);
    
            //3.定义syl语句
            String sql = "update stu set name=\"小八\" where id =2";
            //4. 执行sql的对象
            Statement statement = conn.createStatement();
            //5.执行sql
            int count = statement.executeUpdate(sql);
            //6.处理结果
            System.out.println(count);
            // 7.释放资源
            statement.close();
            conn.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Statement
    作用:执行sql语句

    int    executeUpdate(sql):执行DMLDDL语句
    返回值:(1) DML语句影响的行数 (2) DDL语句执行后,执行成功也可能返回 0
    
    • 1
    • 2
    ResultSet    executeQuery(sql):执行DQL 语句
    返回值: ResultSet 结果集对象
    
    • 1
    • 2

    ResultSet

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    CentOs7.6使用yum命令安装mysql8.0
    论文导读 | 融合大规模语言模型与知识图谱的推理方法
    Redis Sentinel工作原理
    Wireshark TS | FIN 之后不关闭连接疑问
    游戏服务器成DDoS最大攻击重灾区
    使用QNX qcarCamera获取摄像头数据
    【数据分析】基于matlab GUI齿轮箱振动数据分析【含Matlab源码 2122期】
    14:00面试,14:06就出来了,问的问题有点变态。。。
    互联网摸鱼日报(2023-11-20)
    【修改mysql密码的两种方式】
  • 原文地址:https://blog.csdn.net/weixin_55469867/article/details/132924176