7、Java入门教程【面向对象】

2023-10-27

面向对象是Java编程的核心概念,如果不能充分了解面向对象的思想,那么会给你在实际的项目开发过程中,带来很多业务设计上的困扰。

一、构造器

我们在设计完一个类,在使用这个类去创建对象实例的时候,有些场景是需要对实例做初始化操作的,那么Java中提供了构造器来满足这方面要求。

1、原则

  • 名字必须与所在类名称一致
  • 不能有返回值和返回值类型
  • 构造器也可以重载(参数列表不一样)
  • 类在设计时,如果没有写构造器,Java是会为类自动生成一个无参数构造器。
  • 如果定义类的有参数构造器,则不会创建无参数构造器。【建议手动创建一个无参数构造器】

2、 构造器的多种形式

默认无参数构造器:

class Rock{
	printme(){
		System.out.print("printme");
	}
}

Rock r=new Rock();

有参数构造器:

class Rock {
    Rock(String name) {
        System.out.print("这是一个有参构造器:" + name);
    }
}
Rock r = new Rock("IT飞牛");
//这是一个有参构造器:IT飞牛

构造器重载:

class Rock {
    Rock(String name) {
        System.out.println("这是一个有参构造器,姓名:" + name);
    }

    Rock(String name, int age) {
        this(name);//这里使用this调用其他构造器,复用
        System.out.println("这是一个有参构造器,年龄:" + age);
    }
}

Rock r = new Rock("IT飞牛", 18);

//这是一个有参构造器,姓名:IT飞牛
//这是一个有参构造器,年龄:18

二、重载

类中的一个方法,有些场景下需要根据不同的情况,做不同的操作,当然我们可以直接定义不同的方法就能实现。但是有些时候的确是同类型的操作,方法名最好是一样的,这时候我们可以使用重载来实现。

类中的重载主要是根据方法传入的参数类型列表,去自动识别调用不同的方法执行。

下面提供了同方法名,但是不同参数的案例:

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Rock r = new Rock();
        r.say();
        r.say("你好");
        r.say("你好", 3);
        r.say(3, "你好");
    }
}

class Rock {
    void say() {
        System.out.println("啥都没说");
    }

    void say(String msg) {
        System.out.println("说:" + msg);
    }

    void say(String msg, int num) {
        System.out.println(msg + ",被说了" + num + "遍");
    }

    void say(int num, String msg) {
        System.out.println("说了" + num + "遍," + msg);
    }
}
//啥都没说
//说:你好
//你好,被说了3遍
//说了3遍,你好

可以看到,不同的入参,调用了不同的同名方法。

涉及基本类型的重载,可能会由于变量类型提升,调用的方法有偏差。例如:Rock加入有个do方法,调用r.do(1)这个方法,参数会按照int类型去识别。请看下面案例:“

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Rock r = new Rock();
        r.say(2);
        r.say((byte) 2);
    }
}

class Rock {
    void say(byte num) {
        System.out.println("这是byte");
    }

    void say(int num) {
        System.out.println("这是int");
    }

}
//这是int
//这是byte

三、this关键字

this就是一个变量,可以用在方法中,来拿到当前对象。

接触过js的小伙伴应该是比较好理解,java中的this的指向和js中的this的指向是一个原则:【谁调用,this就指向谁】

四、static的含义

使用static final修饰的成员变量就被称为常量。

1、静态属性和方法

  • static方法是没有this的,在static方法内部不能调用this。并且在static内部不能调用非静态方法。
  • 在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途,他很像全局方法。
  • static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
  • 静态成员在类被加载时就被初始化,不需要创建类的实例。
  • 静态成员被所有实例共享,可以用来存储类级别的信息。
package com.itfeiniu.hello;
public class Food {
    String name;	//这是每个Food实例的变量,每个实例都有独立的一个name属性。
    static int num;	//这是Food类的变量,所有类的实例共享一个变量。
}

2、静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量

public class Student {
    public String id;
    public String name;
    public static String major;

    static {
        major = "软件工程";
        System.out.println("执行了 静态代码块");
    }
}
  • 静态代码块不管生成多少个对象,其只会执行一次
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并
public class Demo {
    private static int x = 1;
    private int y = 2;

    static {
        System.out.println("静态代码块1,x=" + x);
        x = 10;
    }

    {
        System.out.println("实例代码块1,x=" + x + ", y=" + y);
        y = 20;
    }

    public Demo() {
        System.out.println("构造函数,x=" + x + ", y=" + y);
        y = 30;
    }

    static {
        System.out.println("静态代码块2,x=" + x);
        x = 100;
    }

    {
        System.out.println("实例代码块2,x=" + x + ", y=" + y);
        y = 40;
    }
    public static void main(String[] args) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
    }
}

在这里插入图片描述

五、封装

合理隐藏 合理暴露

1、访问控制

java类中的方法或者属性,可以设置访问范围,修饰符是:privateprotectpublic

  • private:该成员可以被该类内部成员访问;

  • default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问;

  • protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问;

  • public:该成员可以被任意包下,任意类的成员进行访问。

2、读写拦截器getter、setter

java中的读写拦截器是基于public方法来实现的。

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Rock r = new Rock();
        r.setName("张三");
        System.out.println(r.getName());
        r.setAge(20);
        System.out.println(r.getAge());
    }
}

class Rock {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private int age;

}
//张三
//20

可以使用IDEA快速生成gettersetting,如下图:

image-20230725200155008.image-20230725200211337

六、实体类

实体类的特点:

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

下面Student类就是典型的实体类,整个类就是用来保存学生数据的,没有其他任何数据处理业务。一般实体类会配合实体类的操作类来使用,实体类存放数据,操作类StudentOperator使用实体类的数据做数据处理业务。

代码如下:

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Student std1 = new Student("张三", 60);
        StudentOperator sto1 = new StudentOperator(std1);
        sto1.printPass();

        Student std2 = new Student("李四", 50);
        StudentOperator sto2 = new StudentOperator(std2);
        sto2.printPass();
    }
}

class StudentOperator {
    private Student student;

    public StudentOperator(Student student) {
        this.student = student;
    }

    public void printPass() {
        if (student.getScore() >= 60) {
            System.out.println(student.getName() + ",及格了");
        } else {
            System.out.println(student.getName() + ",没及格");
        }
    }
}

class Student {
    private String name;
    private int score;

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

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

七、继承

继承是实现软件复用的重要手段。

1、extends和implements

继承中最常使用的两个关键字是 extendsimplements 。通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。

所有 Java 的类均是由 java.lang.Object 类继承而来的,所以 Object 是所有类的祖先类,而除了 Object 外,所有类必须有一个父类。

public interface Animal {}

public class Mammal implements Animal{
}

public class Dog extends Mammal{
}

Java不支持多继承,例如下面的写法是错误的:

public class extends Animal, Mammal{} 

但是我们可以用接口来实现(多继承接口来实现),代码结构如下:

//Apple.java
package com.itfeiniu.hello;

class Fruit {
    String color;
    int kg;
    String shape;
}

interface Fruit1 {
    public void eat1();

    public void travel1();
}

interface Fruit2 {
    public void eat2();

    public void travel2();
}

public class Apple extends Fruit implements Fruit1, Fruit2 {
    public Apple(String color, int kg, String shape) {
        this.color = color;
        this.kg = kg;
        this.shape = shape;
    }

    public void eat1() {
        System.out.println("eat1");
    }

    public void travel1() {
        System.out.println("travel1");
    }

    public void eat2() {
        System.out.println("eat2");
    }

    public void travel2() {
        System.out.println("travel2");
    }
}

//helloworld.java
package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Apple app = new Apple("red", 5, "circle");
        app.eat1();
        app.eat2();
        System.out.println(app.color);
    }
}
//eat1
//eat2
//red

八、抽象类

抽象类总结规定:

  1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

1、抽象方法

如果一个类包含抽象方法,那么该类必须是抽象类。

public abstract void Test{
    public abstract void func();
}

2、抽象类

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类必须声明为抽象类。

最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象从而失去意义。

package com.itfeiniu.hello;

public abstract class Food {
    public abstract void print();
}

class Apple extends Food {
    @Override
    public void print() {
        System.out.println("我是一个苹果");
    }
}

class Test {
    public static void main(String[] args) {
        Apple a = new Apple();
        a.print();
    }
}
//我是一个苹果

继承抽象类的子类必须重写父类所有的抽象方法!

抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类(不包含抽象方法的抽象类,目的就是不想让调用者实例化该对象,通常用于某些特殊的类的结构设计)。

九、接口

1、接口与类的区别

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

2、接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

3、抽象类和接口的区别

  • 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  • 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

4、接口的声明

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}
/* 文件名 : NameOfInterface.java */
import java.lang.*;
//引入包
 
public interface NameOfInterface
{
   //任何类型 final, static 字段
   //抽象方法
}

5、接口的实现

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。

类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

实现一个接口的语法,可以使用这个公式:

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

6、接口实例

package com.itfeiniu.hello;

interface Food {
    String SCHOOL_NAME = "IT飞牛";

    default void print1() {
        this.print2();
    }

    private void print2() {
        System.out.println("这里是私有方法print2");
    }

    public static void print3() {
        System.out.println("这里是静态方法print3");
    }

    void print4();
}

class Apple implements Food {
    @Override
    public void print4() {
        System.out.println("我是一个苹果," + this.SCHOOL_NAME);
    }
}

class Test {
    public static void main(String[] args) {
        Apple a = new Apple();

        a.print1();
//        a.print2(); 报错
        Food.print3();
        a.print4();
    }
}
//这里是私有方法print2
//这里是静态方法print3
//我是一个苹果,IT飞牛

7、多继承

package com.itfeiniu.hello;

interface A {
    void test1();
}

interface B {
    void test2();
}

//方式一
//interface C extends A, B {
//    //这里实现接口多继承
//}

//class Food implements C {
//
//    @Override
//    public void test1() {
//
//    }
//
//    @Override
//    public void test2() {
//
//    }
//}

//方式二
class Food implements A,B{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}

需要注意的是,多继承时,需要确保父接口中不存在同名方法。如果存在同名方法,那么默认会报错,需要在自身类中重写这个同名的方法。

一个类同时继承一个父类并且实现一个或多个接口,如果父类和接口中存在同名方法,那么优先会继承父类中的同名方法,例如:

package com.itfeiniu.hello;

interface A {
    public static void test1() {
        System.out.println("这里是静态方法test1");
    }
}

class D {
    public void test1() {
        System.out.println("这里是test1方法");
    }
}

public class Food extends D implements A {
    public void run() {
        this.test1();
    }
}

class HelloWorld2 {
    public static void main(String[] args) {
        Food f = new Food();
        f.run();
    }
}
//这里是test1方法

十、内部类

1、成员内部类

package com.itfeiniu.hello;

public class Food {
    public static void main(String[] args) {
        Outer.Inner in = new Outer().new Inner();
        in.test();
        //77
		//88
		//99
    }
}

class Outer {
    private int age = 99;

    class Inner {
        private int age = 88;

        public void test() {
            int age = 77;
            System.out.println(age);
            System.out.println(this.age);
            System.out.println(Outer.this.age);
        }
    }
}

2、静态内部类

package com.itfeiniu.hello;

public class Food {
    public static void main(String[] args) {
        Outer.Inner in = new Outer.Inner();
        in.test();
    }
}

class Outer {
    private int age;
    public static String SchoolName="IT飞牛学院";

    public static class Inner {
        private String name;
        public static int a;

        public void test() {
            System.out.println(SchoolName);
//            System.out.println(age);//报错
        }
    }

    public static void test2() {
        System.out.println(SchoolName);
//        System.out.println(age); //静态方法不能访问实例对象
    }
}
//IT飞牛学院

可以直接访问外部类的静态成员,不能直接访问

3、匿名内部类【重要】

就是以中国特殊的局部内部类;所谓匿名,指的就是不需要位这个类声明名字。

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        Animal animal = new Animal() {
            @Override
            public void cry() {
                System.out.println("喵喵");
            }

            @Override
            public void eat() {
                System.out.println("我吃猫粮");
            }
        };
        animal.cry();
        animal.eat();
    }
}

abstract class Animal {
    public abstract void cry();

    public abstract void eat();
}
//喵喵
//我吃猫粮

匿名内部类作为方法入参:

package com.itfeiniu.hello;

public class HelloWorld {
    public static void main(String[] args) {
        go(new Animal() {
            @Override
            public void cry() {
                System.out.println("喵喵");
            }
        });
//        相同效果
//        Animal animal = new Animal() {
//            @Override
//            public void cry() {
//                System.out.println("喵喵");
//            }
//        };
//        go(animal);
    }

    public static void go(Animal a) {
        a.cry();
    }
}

interface Animal {
    public abstract void cry();

}
//喵喵

一个窗口应用程序中,匿名内部类的应用:

package com.itfeiniu.hello;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HelloWorld {
    public static void main(String[] args) {
        //1、创建窗口
        JFrame win = new JFrame("登录界面");
        JPanel panel = new JPanel();
        win.add(panel);

        JButton btn = new JButton("登录");
        panel.add(btn);

        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(win, "登录一下");
            }
        });
        //用兰姆达表达式替代,效果同上
//        btn.addActionListener(e -> JOptionPane.showMessageDialog(win, "登录一下"));

        win.setSize(400, 400);
        win.setLocationRelativeTo(null);
        win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        win.setVisible(true);
    }
}

image-20230802220615961

image-20230802220639237

十一、关键字

1、super

可以通过 super 关键字来实现对父类成员的访问,用来引用当前对象的父类。

2、final

  • final修饰类,类不能被继承

    final class A{
        public final void
    }
    //class B extend A{}
    
  • final修饰方法,方法不能被重写

    class C{
        public final void test(){}
    }
    class D extends C{
        //@override
        //public void test(){}
    }
    
  • final修饰变量,总规则:有且仅能赋值一次

    class Test{
        public static void main(String[] args){
            final int a;
            a=12;
            //a=13; 再次赋值时报错
            
            final int[] arr={11,22,33};
            arr[1]=222;//这是可以的
            //arr={22,33};//报错
        }
    }
    
  • 使用static final修饰的成员变量就被称为常量

    //通常用于记录系统的配置信息
    public class Constant{
        public static final String SCHOOL_NAME="IT飞牛";
    }
    

十二、枚举

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

7、Java入门教程【面向对象】 的相关文章

  • Java-线程与CPU的关系

    我对多线程还很陌生 我正在开发一个项目 尝试在我的 Java 程序中使用 4 个 CPU 我想做类似的事情 int numProcessors Runtime getRuntime availableProcessors ExecutorS
  • 透明平开窗

    我有一点JWindow上面有一个标志 用户可以将东西拖到上面 我主要在 OS X 上开发我的应用程序 为了获得我使用的透明窗口 setBackground new Color 0 0 0 0 在 Mac 上 这工作得很好 但在 Window
  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称

    我想在执行请求对等点时获取 wi fi direct 名称 这是我的代码 if WifiP2pManager WIFI P2P PEERS CHANGED ACTION equals action Log d tag success dis
  • JavaFX Platform.runLater 的使用以及从不同线程访问 UI

    我有几个问题Platform runLater 我有一个 JavaFX 应用程序类 在这个类中 我运行一个线程 该线程从网络套接字读取数据 现在当我创建一个新的Stage在线程内部 系统抛出异常 JavaFX 事件调度程序线程和我的网络读取
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 设置 SWT Shell 的默认字体

    有没有办法为整个 Shell 设置默认字体 以便任何新控件都将使用相同的字体 看来现在我必须为我创建的每个控件设置字体 这导致了太多的冗余 默认使用的字体由平台选择 请参阅中的其他信息 类字体 SWT 标准小部件工具包 http book
  • 使用 AbstractTableModel 获取 JTable 中选定的行

    我有一个JTable using AbstractTableModel我在哪里有一个JCheckBox在第一列中用于选择行 现在 我需要从已检查的表中获取选定的行 现在 我按顺序从第一行遍历到最后一行并获取所有选择的行 如下所示 List
  • 使用 Spring Data REST 处理自定义异常 (i18n)

    我正在使用 Spring Boot 1 5 4 和 Spring JPA Spring Data REST HATEOAS 我正在寻找一种最佳实践 Spring 方式 来自定义异常 Spring Data REST 正在管理添加 i18n
  • 使用除 SINGLE_TABLE 之外的任何其他 Hibernate 继承策略时 JVM 崩溃

    好吧 这可能不太可能 但还是这样吧 在Java JRE 1 6 0 26 b03 中我有两个类 SuperControl及其子类SubControl 它们都需要是持久对象 我正在使用 Hibernate Annotations 来实现这一点
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • 初级 Java 计数器代码

    我的教授希望我这样做 使用下面的 Counter 接口写入多个可互换计数器 public interface Counter Current value of this counter int value Increment this co
  • 如何修复 Android 7.0 的 Spinner 模式下的 DatePickerDialog?

    我目前正在开发一个简单的项目 其中包含一个包含在 Web 视图中的网站 具有少量交互 以提高网站本身和 Android 移动设备之间的交互性 由于该网站包含用户生日的日期输入字段 因此我希望实现一个与所有设备兼容的旋转格式的日期选择器 我尝
  • 使用Java开发跨平台,不同平台字体缩放不同

    我正在为我的大学制作一些软件 需要一个 GUI 在它的第一个版本中 我让它使用系统外观 因此它看起来像 Linux Mac Windows 中的本机应用程序 我发现这很麻烦 因为我必须根据操作系统使所有 JLabel 具有不同的大小 无论分
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 如何使用剪辑来减少绘画时间?

    我正在尝试使用 Clip 来减少 CPU 负载 但剪辑在屏幕上留下了一些我似乎无法摆脱的垃圾 另外 打开和关闭剪辑似乎对 CPU 负载没有影响 在任一情况下 大部分时间似乎都花在重绘管理器和绘制缓冲图像上 import static jav

随机推荐

  • dedecms支持Word内容一键导入

    1 4 2之后官方并没有做功能的改动 1 4 2在word复制这块没有bug 其他版本会出现手动无法转存的情况 本文使用的后台是Java 前端为Jsp 前端都一样 后台如果语言不通得自己做 Base64编码解码 因为公司业务需要支持IE8
  • 设计模式--观察者模式

    观察者模式 属于行为型模式基本原理 当一个对象被修改时 会自动通知它的依赖对象 主要流程 1 创建一个对象 存储它的所有依赖对象 2 在对象被修改的时候 通知所有依赖的对象 3 创建依赖对象 有统一的刷新方法 注意 避免循环依赖 inclu
  • uni-app-初识

    uniApp 初识 初识uni app 作用 特点 uni app的目录结构 运行编译环境准备 index vue页面分析 常用组件 条件编译 常用条件 模板中 常用条件 样式中 常用条件 配置中 配置页面 pages json 初识uni
  • 无人机集群作战仿真研究现状及在城市作战中的应用前景(附最新无人集群项目内容)

    随着人工智能 分布式系统 组网通信等技术的推进 以及机载硬件水平的显著提升 无人机集群受到以中美为首的军事强国高度关注和大力发展 无人机集群也被认为能够颠覆未来战场形势的一种作战手段 因此军事强国均在加紧无人机集群技术攻关并开展集群飞行试验
  • c语音中打印参数调用层级即call stack, call trace

    http stackoverflow com questions 105659 how can one grab a stack trace in c There s backtrace and backtrace symbols From
  • 智慧电塔倾斜在线监测解决方案

    一 方案背景 我国科技的不断进步 电塔的建设正在飞速发展 由于高压线路途经地域环境复杂 在运行过程中往往会受到多种因素的影响导致电塔变形 倾斜 倒塌 造成巨大的经济损失 因此需要电塔倾斜监测系统来预防此类事件的发生 智慧电塔倾斜监测解决方案
  • LightOJ 1220 Mysterious Bacteria

    Problem LightOJ 1220 Mysterious Bacteria 题意 输入一个 x 2 lt x lt 2 32 求满足 x b p 的最大的 p x b p都是整数 暴力版 枚举b或者枚举p 然后求另外一个 枚举b只要从
  • GLTF编辑器:在线模型材质编辑工具

    GLTF 编辑器 是一个功能强大 易于使用的在线3D模型编辑和查看工具 它支持多种格式的3D模型导入并将模型导出为GLB格式 除了可以对3D模型进行基本属性的修改之外 还支持对模型原点重置以及模型材质纹理修改 对于3D开发者和设计师来说 G
  • 简易聊天室代码分享 js+socket.io

    先言 这我以前写的 这里就是单纯分享下代码 不算正经文章 效果如下 前端用一个单html文件 然后后端用node js和socket io 也是只用一个单js文件就好 这里可以看下代码的实现逻辑就好 因为来连数据库才能运行的 有需要的话告诉
  • java2习题3

    1 编写应用程序求1 2 10 1 用for和while循环语句进行1 2 10 的计算 package yingshu public class one public static void main String args TODO A
  • Mybatis——基础使用学习

    Mybatis 基础使用学习 1 简介 1 1 什么时Mybatis 1 2 持久化 1 3 持久层 1 4 为什么需要Mybatis 2 第一个Mybatis程序 2 1 搭建环境 2 2 创建一个模块 配置好mybatis 2 3 编写
  • Eclipse导入maven项目Pom.xml文件报错处理方法

    文章转载自 https blog csdn net jianzhonghao article details 72858465 Eclipse导入maven项目时 Pom xml文件报错处理方法 导入maven项目 FIle Import
  • css实现分页效果

  • 设有n项任务,加工时间分别表示为正整数t1,t2,...,tn。背包问题系列

    设有n项任务 加工时间分别表示为正整数t1 t2 tn 现有2台同样的机器 从0时刻可以安排对这些任务的加工 知道T时刻所有任务完成 总加工时间为T 设计算法使得总加工时间T最小的调度方案 设给定的实例 t1 1 t2 5 t3 2 t4
  • linux学习(五)解决github网页无法进入

    文章目录 前言 1 问题 2 解决 前言 准确来说这个内容不属于linux学习 但是使用git管理代码时需要用到 这里就提前准备一下 1 问题 github网页无法刷出来 一直转圈 2 解决 step1 找到C Windows System
  • 取整函数_6个Excel取整函数技巧,让你的数据规规矩矩!

    Excel技巧是十分神奇的 可以用来娱乐 也能用来工作 更重要的是可以工作效率 不管是在什么地方 最不讨人喜欢的就是有小数点的数据 那怎么办了 今天就来教给大家6个超简单又很实用的Excel取整函数 1 CEILING 函数取整 CEILI
  • windows10编译open3d 0.13

    目录 写在前面 准备 获取源码 cmake cmake版本 开始cmake 1 命令行 2 cmake gui 编译 安装 测试 完 写在前面 1 环境 win10 visual studio2019 cmake3 22 0 rc1 下载源
  • C语言浮点数存储规则

    1 浮点型数据类型 float double long double 目前常用的类型为float 用于存储单精度浮点数和双精度浮点数 浮点数使用IEEE 电气和电子工程协会 格式 浮点类型的32位浮点数具有 4 个字节 包括一个符号位 一个
  • 【FPGA学习】状态机实现UART通信

    文章目录 前言 一 数据帧结构 二 接收模块 2 1 状态设置 2 1 状态跳转 2 2 奇校验 2 3 数据输出 三 发送模块 3 1 状态跳转 3 2 数据输出 四 顶层模块 总结 前言 在之前的文章中 FPGA学习 实例一 Cyclo
  • 7、Java入门教程【面向对象】

    面向对象是Java编程的核心概念 如果不能充分了解面向对象的思想 那么会给你在实际的项目开发过程中 带来很多业务设计上的困扰 一 构造器 我们在设计完一个类 在使用这个类去创建对象实例的时候 有些场景是需要对实例做初始化操作的 那么Java