Java面向对象基础

2023-11-19


面向对象

image-20230125172609599

面向对象并不是一个技术,而是一种编程的指导思想,让我们以什么形式 组织代码;以什么思路 解决问题。

为什么要学习面向对象?

因为生活中,我们解决问题时,就是采用这种指导思想去解决的,所以,我们写程序去解决问题时,如果也能采用这种指导思想,就会使编程变得非常简单,程序也便于人理解 。

比如有顾客去买手机,顾客是对象,售货员也是对象,钱是对象,手机也是对象。

image-20230125184136365

在我们前面的学习中,Scanner 和 Random都是 Java已经写好的类,但如果我们要解决的问题 Java 没有提供怎么办?

image-20230125213634727

面向对象,重点学什么?

  1. 学习自己如何设计对象
  2. 学习已有的对象如何使用

一、类和对象

1. 类的介绍

Java 中想要创建对象,必须先要有类的存在

类指的是一组相关属性和行为的集合,我们将其理解为是一张对象的设计图

image-20230125214038903

2. 类和对象的关系

  • 依赖关系:Java 中需要根据类,创建对象
  • 数量关系:一个类,可以创建出多个对象

3. 类的组成

  • 属性:
    • 成员变量:跟之前定义变量的格式一样只不过位置需要放在方法的外面
  • 行为:
    • 成员方法:跟之前定义方法的格式一样只不过需要去掉static关键字

下面我们定义了一个学生类,包含两个成员变量姓名、年龄;两个成员方法学习、吃饭。

package cn.edu.hgu.oop;

public class Student {
    //属性;姓名,年龄
    String name = "张三";
    int age = 23;

    //行为:学习,吃饭
    public void study() {
        System.out.println("学生学习...");
    }

    public void eat() {
        System.out.println("学生吃饭...");
    }
}

4. 创建对象和使用对象的格式

前面,我们创建了 Study 类,但是并不能直接运行,需要将类实例化——创建对象。

  1. 创建对象类名
对象名 = new 类名();
  1. 变量的使用格式
对象名.变量名;
  1. 方法的使用格式
对象名.方法名(实际参数);

我们来定义一个 StudyTest 类,用来创建对象和使用对象:

package cn.edu.hgu.oop;

public class StudyTest {
    public static void main(String[] args) {
        Student stu1 = new Student();

        System.out.println(stu1.name);
        System.out.println(stu1.age);

        stu1.study();
        stu1.eat();
    }

}

运行代码,输出结果为:

image-20230125215923781

细节:

  1. 打印对象名,可以看到对象的内存地址
  2. 成员变量就算没有赋值,也可以直接使用,使用的是对象的默认值

我们可以看到输出结果,但这个结果使我们提前写死的,这样不灵活,接下来我们来修改一下代码:

package cn.edu.hgu.oop;

public class StudyTest {
    public static void main(String[] args) {
        Student stu1 = new Student();

        stu1.name = "张三";
        stu1.age = 23;

        System.out.println(stu1.name);
        System.out.println(stu1.age);

        stu1.study();
        stu1.eat();

        System.out.println("-------------");

        Student stu2 = new Student();

        stu2.name = "李四";
        stu2.age = 18;

        System.out.println(stu2.name);
        System.out.println(stu2.age);

        stu2.study();
        stu2.eat();

    }

}

输出结果为:

image-20230125221102477

经过前面的学习,我们初步了解了类的定义与对象的创建和使用,下面我们通过两个案例来进行巩固。

案例1:手机

定义一个手机类 (Phone)

  • 属性: (品牌 brand,颜色 color, 价格 price)
  • 行为:
    • 打电话 (call):输出给 xxx 打电话
    • 发短信 (sendMessage):输出群发短信

编写一个手机测试类 (PhoneTest)

  • 创建两个手机对象, 并给属性赋值

    1. 小米, 白色, 4999

    2. 华为, 黑色, 6999

  • 赋值之后, 校验自己有没有赋值成功, 使用打印语句校验, 调用两个对象各自的成员方法

代码实现:

package cn.edu.hgu.oop;

public class Phone {
    String brand;
    String color;
    int price;

    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public void sendMessage(){
        System.out.println("群发短信");
    }
}

package cn.edu.hgu.oop;

public class PhoneTest {
    public static void main(String[] args) {
        Phone p1 = new Phone();

        p1.brand="小米";
        p1.color = "白色";
        p1.price = 4999;

        System.out.println(p1.brand+"---"+p1.color +"---"+p1.price);

        p1.call("张三");
        p1.sendMessage();

        System.out.println("-----------");

        Phone p2 = new Phone();

        p2.brand="华为";
        p2.color = "黑色";
        p2.price = 6999;

        System.out.println(p2.brand+"---"+p2.color +"---"+p2.price);


        p2.call("王维");
        p2.sendMessage();
    }
}

输出结果为:

image-20230125224246512

案例2:图书

编写一个图书类 (Book)

  • 属性: 编号 (id) 书名(name) 价格 (price)
  • 行为: 展示 (show) 该方法中需要展示出图书的所有属性信息

编写一个图书测试类 (BookTest)

  • 创建 3 个图书对象, 分别赋值为

    (001, 三国, 88.88)

    (002, 水浒, 88.88)

    (003, 富婆通讯录, 10000)

  • 调用3个对象, 各自的show 方法展示属性信息

代码实现:

图书类(Book):

package cn.edu.hgu.oop;

public class Book {

    String id;
    String name;
    double price;

    public void show() {
        System.out.println("编号为:" + id + ",书名为:" + name + ",价格为:" + price);
    }

}

图书测试类(BookTest):

package cn.edu.hgu.oop;

public class BookTest {
    public static void main(String[] args) {
        Book b1 = new Book();
        b1.id = "001";
        b1.name = "三国";
        b1.price = 88.88;

        Book b2 = new Book();
        b2.id = "002";
        b2.name = "水浒";
        b2.price = 88.88;

        Book b3 = new Book();
        b3.id = "003";
        b3.name = "富婆通讯录";
        b3.price = 10000;

        b1.show();
        b2.show();
        b3.show();

    }
}

输出结果为:

image-20230131120552798

二、对象内存图

1. 单个对象内存图

image-20230131120956513

一开始 Student类 和 TestStudent 都在方法区,调用 main 方法,main 方法进入栈内存执行,调用 Student 类创建一个stu变量,在堆内存中新开辟一块空间,并对成员变量初始化,打印变量名会输出变量地址,打印成员变量会打印初始化变量值,根据地址对成员变量进行赋值,堆内存中的数据就会进行修改,再打印成员变量就会输出修改好的成员变量,调用成员方法,先进栈,执行完成后出栈。

2. 两个对象内存图

image-20230131124717792

image-20230131124954119

3. 两个引用指向相同内存图

image-20230131125341813

三、成员变量和局部变量

成员变量和局部变量的区别:

image-20230126072822945

四、this 关键字

1. this 可以解决的问题

定义一个 Student 类:

package cn.edu.hgu.mthis;

public class Student {
    String name;
    int age;

    public void sayHello(String name){
        System.out.println(name);
    }
}

定义一个测试类

package cn.edu.hgu.mthis;

public class ThisDemo {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name = "钢门吹雪";

        stu.sayHello("西域狂鸭");
    }
}

输出结果为:

image-20230131131701441

当局部变量和成员变量出现了重名的情况,Java 使用的是 就近原则

问题:非要使用成员变量,怎么ban?

解决:使用 this 关键字进行区分,this可以区分局部变量和成员变量的重名问题

image-20230131132726504

2. this 介绍

this 代表当前类对象的引用(地址)

this 关键字的作用:

  • this 可以调用本类成员(变量,方法)

    this.本类成员变量

    this.本类成员方法

  • this.的省略原则:

    本类成员方法:没有前提条件,this.可以直接省略

    本类成员变量:方法中没有出现重名的变量,this.才可以省略

3. this 内存图

image-20230131140658109

image-20230126094323598

五、构造方法

1. 构造方法概述

  • 构造器
    • 初始化一个新建的对象
    • 构建、创造对象的时候,所调用的方法
  • 格式:
    • 方法名与类名相同,大小写也要一致
    • 没有返回值类型,连void都没有
    • 没有具体的返回值(不能由return带回结果数据
  • 执行时机:
    • 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
    • 不能手动调用构造方法

image-20230131141417113

2. 构造方法作用

本质作用:创建对象

结合构造方法执行时机:给对象中的属性(成员变量)进行初始化

3. 构造方法注意事项

①构造方法的创建

  • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

②构造方法的重载

  • 构造方法也是方法,允许重载关系出现

③推荐的使用方式

  • 无参数构造方法,和带参数构造方法,都自己手动给出
  • 构造方法不允许手动调用

六、封装

1. 面向对象三大特征

image-20230126151801533

这里我们先来学习封装。

封装:使用类设计对象时,将需要处理的数据,以及处理这些数据的方法, 设计到对象中。

计算出每一名学生的总成绩,展示学生的所有信息

id 姓名 年龄 数学成绩 语文成绩
1 张三 23 90 87
2 李四 24 69 91
public class Student {
    int id;
    String name;
    int age;
    double mathScore;
    double chineseScore;
    // 省略构造方法
    public double getTotalScore() {
        return mathScore + chineseScore;
    }
    
    public void showStudentInfos(){
        System.out.println("学号: " + id);
        System.out.println("姓名: " + name);
        System.out.println("年龄:" + age);
        System.out.println("数学成绩:" + mathScore);
        System.out.println("语文成绩:" + chineseScore);
    }
}

public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student(1, "张三", 23,90,87);
        stu1.showStudentInfos();
        Student stu2 = new Student(2, "李四", 24,69,91);
        stu2.showStudentInfos();
    }
}

这样可以更好的维护数据;使用者无需关心内部实现, 只要知道如何使用即可。

2. 封装的设计规范

合理隐藏, 合理暴露

一辆车,展示给我们的是使用功能,其他的部件都隐藏起来了。

image-20230131143938012

3. 权限修饰符

我们在执行程序的时候,我们不想让对象直接调用某个方法,而是去间接使用它。

image-20230131144330129

  • private :同一个类中
  • (defalut):同一个类中,同一个包中
  • protected:同一个类中,同一个包中,不同包的子类
  • public :任意位置访问

4. 标准 JavaBean

JavaBean 标准:

  1. 这个类中的成员变量都要私有,并且要对外提供相应的getXxx ,setXxx方法
  2. 类中提供无参, 带参构造方法。

实体类的应用场景是什么?

实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。

image-20230131144816241

安装快速生成JavaBean的插件:

image-20230129100307074

image-20230131145007772

生成后的代码:

package cn.edu.hgu.domain;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

七、综合案例

面向对象综合案例-模仿电影信息系统

需求

  • 展示系统中的全部电影(每部电影展示:名称、评分)。
  • 允许用户根据电影编号(id)查询出某个电影的详细信息。

image-20230131151545907

image-20230131151552667

电影需要展示的信息有:

  • int id; 编号
  • String title; 片名
  • String time; 时间
  • double score; 评分
  • String area; 地区
  • String type; 类型
  • String director; 导演
  • String starring; 主演

代码实现:

package cn.edu.hgu.domain;

public class Movie {
    private int id;
    private String title;
    private String time;
    private double score;
    private String area;
    private String type;
    private String director;
    private String starring;


    public Movie() {
    }

    public Movie(int id, String title, String time, double score, String area, String type, String director, String starring) {
        this.id = id;
        this.title = title;
        this.time = time;
        this.score = score;
        this.area = area;
        this.type = type;
        this.director = director;
        this.starring = starring;
    }

    /**
     * 获取
     *
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     *
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     *
     * @return title
     */
    public String getTitle() {
        return title;
    }

    /**
     * 设置
     *
     * @param title
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * 获取
     *
     * @return time
     */
    public String getTime() {
        return time;
    }

    /**
     * 设置
     *
     * @param time
     */
    public void setTime(String time) {
        this.time = time;
    }

    /**
     * 获取
     *
     * @return score
     */
    public double getScore() {
        return score;
    }

    /**
     * 设置
     *
     * @param score
     */
    public void setScore(double score) {
        this.score = score;
    }

    /**
     * 获取
     *
     * @return area
     */
    public String getArea() {
        return area;
    }

    /**
     * 设置
     *
     * @param area
     */
    public void setArea(String area) {
        this.area = area;
    }

    /**
     * 获取
     *
     * @return type
     */
    public String getType() {
        return type;
    }

    /**
     * 设置
     *
     * @param type
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * 获取
     *
     * @return director
     */
    public String getDirector() {
        return director;
    }

    /**
     * 设置
     *
     * @param director
     */
    public void setDirector(String director) {
        this.director = director;
    }

    /**
     * 获取
     *
     * @return starring
     */
    public String getStarring() {
        return starring;
    }

    /**
     * 设置
     *
     * @param starring
     */
    public void setStarring(String starring) {
        this.starring = starring;
    }
    
}

MovieService类

package cn.edu.hgu.test;

import cn.edu.hgu.domain.Movie;

import java.util.Scanner;

public class MovieService {
    Scanner sc = new Scanner(System.in);
    Movie[] movies;

    public MovieService(Movie[] movies) {
        this.movies = movies;
    }

    /**
     * 启动电影信息管理系统
     */
    public void start() {

        lo:
        while (true) {
            System.out.println("----------电影信息系统----------");
            System.out.println("请输入您的选择:");
            System.out.println("1. 查询全部电影信息");
            System.out.println("2. 根据id查询电影信息");
            System.out.println("3. 退出");

            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    queryMovieInfos();
                    break;
                case 2:
                    queryMovieInfoById();
                    break;
                case 3:
                    System.out.println("感谢您的使用,再见!");
                    break lo;
                default:
                    System.out.println("您的输入有误,请检查");
                    break;
            }
        }
    }

    /**
     * 此方法根据电影编号,查询电影详情信息
     */
    private void queryMovieInfoById() {
        // 1.键盘录入用户输入的编号
        System.out.println("请输入您要查询的电影编号:");
        int id = sc.nextInt();
        // 2.遍历数组,从数组中查询电影信息
        for (int i = 0; i < movies.length; i++) {
            Movie movie = movies[i];
            if (movie.getId() == id) {
                // 3.将找到的电影信息,打印在控制台
                System.out.println(movie.getId() + "---" + movie.getTitle() + "---"
                        + movie.getTime() + "---" + movie.getScore() + "---" + movie.getArea() + "---"
                        + movie.getType() + "---" + movie.getDirector() + "---" + movie.getStarring());
                return;
            }
        }
        System.out.println("您输入的编号不存在,请检查!");
    }

    /**
     * 展示系统中全部的电影(名称,评分)
     */
    private void queryMovieInfos() {
        // 1.遍历数组,取出每一个电影对象
        for (int i = 0; i < movies.length; i++) {
            Movie movie = movies[i];
            // 2.通过电影名称,调用内部 getXxx方法,获取信息并打印
            System.out.println(movie.getTitle() + "---" + movie.getScore());
        }
    }
}

Test类

package cn.edu.hgu.test;

import cn.edu.hgu.domain.Movie;

public class Test {
    public static void main(String[] args) {
        Movie movie1 = new Movie(1, "东八区的先生们", "2022", 2.1, "中国大陆", "剧情 喜剧", "夏睿", "张翰 王晓晨");
        Movie movie2 = new Movie(2, "上海堡垒", "2019", 2.9, "中国大陆", "爱情 战争 科幻", "滕华涛", "鹿晗 舒淇");
        Movie movie3 = new Movie(3, "纯洁心灵·逐梦演艺圈", "2015", 2.2, "中国大陆", "剧情 喜剧", "毕志飞", "朱一文 李彦漫");

        Movie[] movies = {movie1, movie2, movie3};

        MovieService movieService = new MovieService(movies);
        movieService.start();
    }
}

运行结果为:

image-20230131162427900

``

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面向对象基础 的相关文章

  • 唯一索引或主键违规:“PRIMARY KEY ON PUBLIC.xxx”; SQL语句

    每当我的应用程序启动时 我都会收到以下错误消息 Caused by org h2 jdbc JdbcSQLException Unique index or primary key violation PRIMARY KEY ON PUBL
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • 3D游戏编程与设计作业——血条预制

    一 作业要求 血条 Health Bar 的预制设计 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 二 实现效果 血条
  • ROS自学实践(10):ROS节点同时订阅多个话题并进行消息时间同步

    一 前言 在进行SLAM建图或自动驾驶系统设计的过程中 往往涉及到多种传感器进行环境感知和信息采集 这就不仅需要一个节点接收多个传感器数据 还要求传感器数据的时间戳同步 这样才能实现环境数据的实时感知和处理 本文基于ROS操作系统 从C 和
  • Android 5.x 权限问题解决方法

    0 关于selinux的基础知识 可以参见http www cnblogs com shell812 p 6379321 html TE语言规则 参见http www cnblogs com shell812 p 6379370 html
  • npx报错“Path must be a string. Received undefined”in windows解决方法

    在使用Windows上使用较老版本的nodejs 如何我使用的v8 9其自带的npx的版本为9 7 在Windows上使用会存在 Path must be a string Received undefined 的错误 通过 GitHub
  • QT程序运行时依赖设置

    本文主要解决Qt程序运行时容易遇到的两个问题 找不到相关的Qt6Core dll Qt6Widgets dll等库 这种情况下 把相关DLL所在目录添加到系统的环境变量 PATH 中 就可以了 无法导入Qt相关的插件 qt qpa plug
  • PCL调错:(3)error C2589“(“:“::“右边的非法标记

    错误提示 造成该错误的原因是 pcl库中的函数模板max与Visual C 中的全局的宏max冲突 百度了以下看了一共有两种解决方案 第一种不用修改库里边的源代码 设置项目属性 在预定义处理器中添加定义NOMINMAX来禁止使用Visual
  • Android 旧项目引入 (kotlin)插件简单记录

    1 确认自己 AS 的kotlin 插件 已经安装 2 选择kotlin plugin updates 文件显示 3 选择configure kotlin in project 进入选择 Android gradle 的选项 由于我这边配置
  • JAVA中数组冒泡排序和选择排序

    冒泡排序的思想 两两之间比较大小 小的数在前 大的数在后 共比较i 1次 static void MaoPaoArray int a for int i 0 i lt a length 2 i for int j 0 j lt a leng
  • tortoisegit 常见错误disconnected no supported authentication methods available(server sent: publickey)

    本文转载自 https blog csdn net yym6789 article details 53807640 1 安装好小乌龟git后 用小乌龟的pull 从github上拉取项目 遇到错误 disconnected no supp
  • 7 整数反转 c++

    leetcode7 整数反转 题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 注意 如果反转后整数溢出那么就返回 0 算法思路 使用一个64位的long long类型来存储结果整数 避免反转后结果溢出报错
  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 在openwrt使用C语言增加ubus接口(包含C uci操作)

    在openwrt使用C语言增加ubus接口 包含C uci操作 文章目录 在openwrt使用C语言增加ubus接口 包含C uci操作 创建自己的软件包 软件包结构 编写代码和启动脚本 重点 案例大致分析 实现过程 ubus demo i
  • java调用脚本语言笔记(jython,jruby,groovy)

    java调用脚本语言笔记 jython jruby groovy 有两种方法 1 java se 6以后实现了jsr 223规范 java代码 java view plain copy ScriptEngineManager factory
  • C语言:深度解析各种数据在计算机内存中的存储

    文章目录 数据的各种类型的存储 各种数据类型的意义是什么 整形在计算机内存中的存储 原码反码补码 为什么数据的存放都是补码 什么是大小端 整形提升 什么是整型提升 那么整型提升是做什么的 如何进行整形提升 关于整型提升的例子 关于整形数据存
  • c++编写COM组件,并使用该组件

    在网上看了很多个介绍com组件的方法 对于一个新手来说看很久都看不懂 自己项目需要实现com 于是自己整理了一个文档和代码 先记录下来 以防以后用的上 步骤如下 1 新建ATL项目 你也可以是其他项目 只要是dll就行 可以支持MFC AT
  • [Excel VBA]如何拷贝数组?

    本文翻译至 http itpro nikkeibp co jp atcl column 15 090100207 090100143 ST system Variant型变量 数组 数组是可以保存多个值的 一种变量 变量是独幢楼房的话 数组
  • 详解java设计模式之-----观察者模式

    观察者模式 对象间的联动 什么是观察者模式呢 首先 看一个故事 红灯停 绿灯行 在日常生活中 交通信号灯装点着我们的城市 指挥着日益拥挤的城市交 通 当红灯亮起 来往的汽车将停止 而绿灯亮起 汽车可以继续前行 在这个过程中 交 通信号灯是汽
  • 串行接口的工作原理和实现

    串口的结构和工作原理 通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UART 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输入信号转成串行输出信号的芯片
  • postman接口测试的关联测试

    在接口测试中 很多时候需要依赖前一个请求的响应数据关联到后一个请求的请求数据中来 在postman的中有一个Pre request Script 板块 如示例接口为 https api weixin qq com cgi bin user
  • Java面向对象基础

    文章目录 面向对象 一 类和对象 1 类的介绍 2 类和对象的关系 3 类的组成 4 创建对象和使用对象的格式 二 对象内存图 1 单个对象内存图 2 两个对象内存图 3 两个引用指向相同内存图 三 成员变量和局部变量 四 this 关键字