【系列05】类与对象 面向对象 封装继承多态 类 内部类

news2024/12/23 18:13:41

面向对象😁

文章为本人随课程记录笔记形成 跟随老师"秦疆(遇见狂神说)" 非常欢迎大家在文章下面留言评论互相交流,也欢迎大家有问题可以联系本人或者本人公众号 😉学思则安

参考课程https://www.kuangstudy.com/course?cid=1
有问题联系我 点我跳转博客首页

方法的学习知识回顾😘

  • 修饰符

    • 修饰符
    • 返回类型
    • break:跳出switch,结束循环 和return的区别
    • 方法名:注意规范 见名知其意
    • 参数列表:(参数类型 ,参数名)…
    • 异常抛出
  • 方法调用

    • 静态方法
    • 非静态方法
    • 形参和实参
    • 值传递和引用传递
  • 类方法调用

    • 方法一 用到了static 可以直接调用发类方法

      package com.oop;
      //学生类
      public class Student {
      
          //非静态方法
          public static void say(){
              System.out.println("学生说话了");
          }
      }
      
      package com.oop;
      
      public class Demo02 {
          public static void main(String[] args) {
            Student.say();
          }
      
      }
      
    • 方法二 实例化类 new [一般工作时候常用的方法]

      package com.oop;
      //学生类
      public class Student {
      
          //非静态方法
          public  void say(){
              System.out.println("学生说话了");
          }
      }
      
      package com.oop;
      
      public class Demo02 {
          public static void main(String[] args) {
              //实例化类 new
              //对象类型 对象名 =对象值
              Student student = new Student();
          }
      
      }
      
  • 调用过程出现错误

    • 等于是一个存在的调用不存在的所以这里会报错的

      //和类一起加载
      //一个存在的东西调用一个不存在的东西 所以在a方法调用b的时候会报错
      public static  void a(){
          b();
      }
      //类实例化之后才会存在
      public  void b(){
      }
      

留下思考补充😍

  • 引用传递

    • 案例一

      package com.oop;
      
      public class Demo04 {
          public static void main(String[] args) {
              int a=1;
              System.out.println(a);
              Demo04.change(a);
              System.out.println(a);
              //两个的值都是1
          }
          //返回值为空
          public static void change(int a){
      
              a=10;
          }
      }
      
    • 案例二

      package com.oop;
      //引用传递:对象  本质还是值传递
      public class Demo05 {
          public static void main(String[] args) {
              Person person = new Person();
      
              System.out.println(person.name );//输出:null
      
              Demo05.change(person);
              System.out.println(person.name);//输出:迅猛
          }
          public static void change(Person person ){
              //person 是一个对象:指向的--->Person person = new Person(); 这是一个具体的人
              person.name="迅猛";
          }
          }
      //定义了一个person类,有一个属性 name
      class Person{
          String name;//null
      }
      

类与对象的关系🤔

  • 类是一种抽象的数据类型,他是对某一类事物整体描述/定义,但是并不能代表一种具体的物体
  • 对象是抽象概念的具体实例

如何去创建对象

  • 开始规范代码 //一个项目只存在一个main方法

    • 学生类
      • 每个类里面只有 属性:字段+方法
      • this代表着这个方法
      • new关键字创建对象:除了分配空间以外,还会给创建好的对象进行默认初始化如age->0 name->null,以及对类中构造器的调用
    package com.oop.Demo02;
    //学生类
    public class Student {
        //属性:字段
        String name;
        int age;
    
        //方法
        public void study(){
            System.out.println(this.name+"在学习");
        }
    
    }
    
    package com.oop.Demo02;
    //一个项目应该只存在一个main方法
    public class Application {
        public static void main(String[] args) {
            //类是抽象的 我们需要实例化这个东东
            //类实例化后悔返回一个自己的对象
            //student对象就是一个Student类的具体事例
            Student xiaoming = new Student();
            Student xiaohong = new Student();
    
            xiaoming.age=3;
            xiaoming.name="小明";
    
            System.out.println(xiaoming.age);
            System.out.println(xiaoming.name);
    
            xiaohong.age=3;
            xiaohong.name="小红";
            System.out.println(xiaohong.age);
            System.out.println(xiaohong.name);
        }
    }
    

构造器的使用

  • 构造器:

    1. 和类名相同
    2. 没有返回值
    3. 根据调用所穿参数不同
  • 作用:

    1. new 本质在调用构造器
    2. 初始化一些对象的值
  • 注意点:

    1. 定义有参构造 如果想使用无参构造 显示的定义是一个无参的构造
  • 快捷键

    ale+insScrLk ->Constructor

  • 代码

    package com.oop.Demo02;
    
    //java-->class
    public class Person {
        //一个类即使什么都不写 ,也会存在一个方法
        //显示的定义构造器
        String name;
        int age;
    
        //实例化初始值
        //使用new关键字,本质实在调用构造器
        //本质是来初始化值
        public Person() {
        }
    
        //有参构造:一旦定义了有参构造,无参必须显示定义
        public Person(String name) {
            this.name = name;
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
    }
    
    package com.oop.Demo02;
    //一个项目应该只存在一个main方法
    public class Application {
        public static void main(String[] args) {
           //使用new 关键词 实例化一个对象
            Person person = new Person();
            System.out.println(person.name);//kuangshen
    
        }
    }
    
  1. 类与对象
    类是一个模板:抽象,对象是一个具体的实例

  2. 方法:

    定义和调用

  3. 对应的引用
    引用类型:基本类型(8)

    对象是通过引用来操作的:栈—>堆

  4. 属性:字段field 成员变量

    默认初始化

    数值:0 0.0

    char:u0000

    boolean:false

    引用:null

    修饰符 属性类型 属性名=属性值!

  5. 对象的创建会使用

    • 必须使用new 关键字创造对象,构造器 Person kuangshen=new Person();
    • 对象的属性 kuangshen.name
    • 对象的方法 kuangshen.sleep();
  6. 类:

    静态的属性 属性

    动态的行为 方法

封装 继承 多态😁

封装

如何进行封装

  • 封装的作用
    1. 提高程序安全性,保护数据
      2. 隐藏代码的实现细节
      3. 统一接口
      4. 提升系统可维护性
  • 快捷alt +ins选择getter和setter 就可以直接使用get set封装方法
package com.oop.Demo04;
//类
public class Student {
    //属性私有private 关键字
    private String name; //名字
    private int num;//学号
    private  char sex;  //性别
    private  int age;//年龄
    //提供一些可以操作这个属性的方法
    //提供一些public 的get和 set 方法
    //get 获得数据
    public String getName(){
        return this.name;
    }
    //set 设定数据
    public void setName(String name){
        this.name=name;
    }
   //快捷 alt +ins 选择getter和setter 就可以get set方法
   public int getNum() {
        return num;
    }
    public void setNum(int num) {
            this.num = num;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    //封装的好处就是可以对数据进行合法性判断和约束
    public void setAge(int age) {
        if(age>150||age<0){
            this.age = 3;
        }else{
            this.age=age;
        }
    }
}
package com.oop;
import com.oop.Demo04.Student;
public class Application {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("刘磊");
        System.out.println(s1.getName());
        s1.setAge(999);
        System.out.println(s1.getAge());
    }
}
  • 输出
刘磊
3 //因为识别到999不合法

继承

  • 继承关键词extends的意思是"扩展" 子类是父类的扩展
  • 一般两个关系 子类和父类 子类可以继承父类所以方法
  • 这个地方也用到了上面的封装方法
package com.oop.Demo05;
//Person 人:父类
//子类可以继承父类,会获得父类的所有方法
public class Person {
    private int money =10_0000_0000;
    public void say(){
        System.out.println("说了一句话");
    }
  //这个地方也是用到了封装方法
    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

Object类

  • 同时我们发现有存在一个我们看不见的类 叫做 object类 之下有需要本地类
  • 在java中所有类都默认直接或者间接继承object类

super与this

  • super子类继承父类通过super

    • 同时父类用private私有的东西无法被继承
    • 如下当子类父类有相同的方法时候
      • print();//当前类的student
        this.print();//当前类的student
        上面两种写法都访问当前类
  • super注意点:

    1. super调用父类的构造方法,必须在构造方法的第一个
    2. super必须只能出现在子类的方法或者构造方法中
    3. super和this 不能同时调用构造方法!
  • 与this区别

    • this:本身调用者这个对象
    • super:代表父类对象的应用
    • 前提
      • this没有继承也可以使用
      • super必须要有继承条件才能使用
    • 构造方法
      • this();本类的构造
      • super();父类的构造
  • 测试一

package com.oop.Demo05;//学生is 人:派生类,子类
//子类可以继承父类,会获得父类的所有方法
public class Student extends Person{
    public  void print(){
        System.out.println("Student");
    }
    public  void test1 (){
        print();//当前类的student
        this.print();//当前类的student
        super.print();//父类的person
    }
}
package com.oop.Demo05;//Person 人:父类
//在java中所有类都默认直接或者间接继承object类
public class Person {
    //private私有的东西无法被继承
    public  void print() {
        System.out.println("Person");
    }
}
package com.oop;
import com.oop.Demo05.Person;
import com.oop.Demo05.Student;
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test1();
    }

}
  • 测试二

    • 输出结果
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
        //Sun
        //出色的你
        //csdw
    
    package com.oop.Demo05;
    //学生is 人:派生类,子类
    //子类可以继承父类,会获得父类的所有方法
    public class Student extends Person{
        public Student() {
        private String name="出色的你";
        public  void test2 (String name){
            System.out.println(name);
            System.out.println(this.name);
            System.out.println(super.name);
        }
    }
    
    package com.oop.Demo05;
    //Person 人:父类
    public class Person {
        protected String name="csdw";
    }
    
    package com.oop;
    import com.oop.Demo05.Person;
    import com.oop.Demo05.Student;
    
    public class Application {
        public static void main(String[] args) {
            Student student = new Student();
            student.test2("Sun");
        }
    }
    
  • 隐藏调用代码

    • 输出结果
      • 父类没有无参子类也不能有
    Person父类无参执行了
    Person子类无参构造执行了
    
    public class Student extends Person{
            public Student() {
                //super();//调用父类构造器代码必须在子类构造器的第一行
                //this(name:"hello");
                System.out.println("Person子类无参构造执行了");
            }
    }
    
    public class Person {
        public Person() {
            System.out.println("Person父类无参执行了");
        }
    

方法重写

  • 方法重写
    • 静态方法:调用只和左边,定义的数据类型有关
    • 父类引用指向了子类
    • 需要有继承关系,子类重写父类的方法!
      1. 方法名必须相同
      2. 参数列表必须相同
      3. 修饰符:范围可以扩大;[不能缩小] public>Protected>Default>private
      4. 抛出的异常:范围可以被缩小但是不能放大;[后续再理解]
    • 子类方法和父类方法必须一致:方法体不同!
    • 为什么需要重写?
      1. 父类的功能子类不一定需要也不一定满足 用快捷键alt+ins选用Override Methods
//代码一
package com.oop.Demo05;
//A与B形成父子关系
public class A extends B{
    public  void test() {
        System.out.println("A=>test" );
    }

}
package com.oop.Demo05;
//重写和属性无关
public class B {
    public  void test() {
        System.out.println("B=>test");
    }
}
package com.oop;
import com.oop.Demo05.A;
import com.oop.Demo05.B;

public class Application {
    public static void main(String[] args) {
        //方法调用只和左边,定义的数据类型有关
        A a = new A();
        a.test();//A
        //父类引用指向了子类
        B b =new A();
        b.test();//B
    }
}

多态

  • 子类能调用的都是自己的或者父类的

    父类虽然可以指向子类,但是不能调用子类独有方法

    • 就比如下面这个如果是s2.eat();就会报错无法调用子类方法
    • 而且s2.run(); s1.run();此时子类父类都存在run方法,我们可以知道当子类父类都存在的方法我们优先访问子类方法
  • 多态注意事项

    1. 多态是方法的多态 没有属性的多态
    2. 父类和子类,有联系 类型转换异常!
    3. 存在条件:继承关系 ,方法需要重写,父类引用指向子类对象! Father f1=new Son();
      • 无法被从写更没有多态的方法
        1. static 属于类,他不属于实例
        2. final 常量;
        3. private方法,私有方法
package com.oop.Demo06;

public class Student extends Person{
    public  void run() {
        System.out.println("Student");
    }
    public  void eat() {
        System.out.println("Student eat");
    }
}
package com.oop;
import com.oop.Demo06.Person;
import com.oop.Demo06.Student;

public class Application {
    public static void main(String[] args) {
        //可以指向的引用类型就不确定了额:父类的引用指向
        //Student能调用的都是自己的或者父类的
        Student s1 = new Student();
        //Person虽然可以指向子类,但是不能调用子类独有方法
        Person s2 = new Student();//父类
        Object s3 = new Student();//祖宗
        //上面这些 能不能用主要是看左边有没有,与右边关系不大
        s2.run();
        s1.run();
        s1.eat();
    }
}
package com.oop.Demo06;

public class Person {
    public  void run() {
        System.out.println("跑的好快");
    }
}

instanceof

  • 总结

    1. 父类引用指向子类的对象
    2. 把子类转换成父类,向上转型可以直接转换
    3. 把父类转换成子类,向下转型需要强制转换可能会丢失一些方法
    4. 方便方法的调用 减少重复代码 有效提升利用率
public class Application {
    public static void main(String[] args) {
        //Object>String
        //Object>Person>Teacher
        //Object>Person>Student
        //instanceof在这里用于判断父子关系
        Object object= new Student();
        //System.out.println(x instanceof y); //能不能编译通过!!
        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//False
        System.out.println(object instanceof String);//False
        System.out.println("=================");

        Person person=new Student();
        System.out.println(person instanceof Student);//true
        System.out.println(person instanceof Person);//true
        System.out.println(person instanceof Object);//true
        System.out.println(person instanceof Teacher);//False
        //System.out.println(person instanceof String);//编译报错
        System.out.println("=================");

        Student student=new Student();
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
       //System.out.println(student instanceof Teacher);//编译报错
        //System.out.println(student instanceof String);//编译报错
        System.out.println("=================");
    }
  • 对象类型转换
//类型之间的转换  父    子

//高                 低
Person s1 =new Student();
//s1将这个对象转化为Student类型,我们就能使用student 类型的方法了
/**
 Student s2 = (Student) s1;
s2.go();
 **/
((Student) s1).go();

static

  • 静态方法可以直接访问 非静态无法直接访问
    • 原因看下面 他们的加载访问级别不一样 所以不能调用
package com.oop.Demo07;
public class Student {
    private static int age;//静态的变量
    private double score;//非静态的变量
    //非静态方法
    public void run() {
        System.out.println("run");
    }
    //静态方法
    public static void eat() {
        System.out.println("eat");
    }
    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println(Student.age);
        System.out.println(s1.age);
        //需要先实例化对象才能使用
        System.out.println(s1.score);
      //可以直接调用
        Student.eat();
        eat();
        //无法调用
        //run();
    }
}
  • 访问优先级别是不一样的
package com.oop.Demo07;
public class Person {
    //2:赋初试值~
    {
        System.out.println("匿名代码块");
    }
    //1:只执行一次~
    static{
        System.out.println("静态代码块");
    }
    //3
    public Person() {
        System.out.println("构造方法");
    }
    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("=====================");
        Person person2 = new Person();
    }
}
  • 同时在学习中我们注意到 被final修饰以后 无法被继承

在这里插入图片描述

  • 引用库import
package com.oop.Demo07;

import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Text {
    public static void main(String[] args) {
        //Math.random()
        //Math.PI
        System.out.println(random());
        System.out.println(PI);
    }
}

抽象类

  • abstract 抽象方法 只有名字没有方法的实现

    1. 抽象类里面可以有一些普通方法

    2. 抽象方法必须定义在抽象类里面

    3. 不能new这个抽象类,只能靠子类去实现它: 约束!! 'Action' is abstract; cannot be instantiated

  • 抽象存在的意义 抽象出来~提高开发效率

    package com.oop.Demo08;
    //abstract 关键词 抽象类   类 extends:单继承  (接口才能多继承)
    public abstract  class Action {
        //约束~有人帮我们实现
        //abstract 抽象方法 只有名字没有方法的实现
        public abstract void doSomething();
        public  void run(){
            System.out.println("汪汪汪");
        }
    }
    

接口

  • 接口的本质是契约

    • interface 定义的关键字,接口都需要实现类

    • 接口定义

      1. 接口中的所有定义其实都是抽象的 默认 public abstract

        public abstract void add(String name);
        void add(String name);
        
      2. 接口定义常量 默认 public static final

        public static final int Age=99;
        int Age=99;
        
  • 接口的作用

    1. 约束
    2. 定义方法让不同的人实现 ~
    3. 接口不能被实例化[接口中没有构造方法]
    4. 实现接口必须要重写接口中的方法 Alt +Enter一键生成
    5. 类可以实现接口 implements 接口可以进行多继承
    6. 多继承~利用接口实现继承
package com.oop.Demo09;
//interface 定义的关键字,接口都需要实现类
public interface UserService {
    //接口定义常量 默认 public static final
    int Age=99;
    //接口中的所有定义其实都是抽象的 默认 public abstract
    void add(String name);
    void update(String name); 
    void delete(String name);
    void query(String name);
}
package com.oop.Demo09;
public interface TimeService {
    void time();
}
package com.oop.Demo09;
//类 可以实现接口 implements 接口 可以继承多个'
//实现了接口的类,就需要重写接口中的方法~
//多继承~利用接口实现继承
public class UserServiceImpl implements UserService,TimeService {

    @Override
    public void time() {
    }
    @Override
    public void add(String name) {
    }
    @Override
    public void update(String name) {
    }
    @Override
    public void delete(String name) {
    }
    @Override
    public void query(String name) {
    }
}

内部类

  • 通过外部类来实例化内部类

    public class Outer {
        private int id;
        public class Inner{
            public void in(){
                System.out.println("这就是内部类");
            }
        }
        }
    
    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();
    inner.in();
    
  • 内部类可以获得外部类的是私有属性私有方法

    public class Outer {
        private int id=100;
        public void out(){
            System.out.println("这就是外部类方法");
        }
        public class Inner{
            public void in(){
                System.out.println("这就是内部类");
            }
            
            //获得外部类的是私有属性私有方法
            public void getID(){
                System.out.println(id);
                in();
            }
        }
    }
    
  • 一个java中可以有多个class ,但是只能有一个public class方法

    public class Outer {
        }
        //一个java中可以有多个class ,但是只能有一个public class方法
        class A{
            public static void main(String[] args) {
            }
        }
    
  • 局部内部类

    package com.oop.Demo10;
    public class Outer {
        public void method(){
            //局部内部类
            class Inner{
                public void in(){
                }
            }
        }
    }
    
  • 以后再看吧

    package com.oop.Demo10;
    public class Test {
        public static void main(String[] args) {
            Apple apple = new Apple();
            //没有名字初始化类,不用将实例保存到变量中~
            new Apple().eat();
        }
    }
    class Apple{
        public void eat(){
            System.out.println("1");
        }
    }
    interface  UserService{
        void hello();
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文章&#xff0c;Vue 框架目前的地位大…

现在什么款式运动无线耳机好、最适合运动的无线蓝牙耳机推荐

随着经济越来越好&#xff0c;人们的生活质量提高&#xff0c;我们对健康也是更加重视了。越来越多人开始“动起来”。健康运动&#xff0c;自然少不了专业的运动耳机。一副适合的运动耳机对我们锻炼身体有着事半功倍的作用&#xff0c;那么有哪些品牌值得推荐呢&#xff1f;小…

论文笔记(1):Large Language Models are few(1)-shot Table Reasoners

文章目录AbstractIntroductionRelated worksMethodExperimentdatasetbaselinesresultsmain resultsanalysisLimitationAbstract 已有研究表明&#xff0c;大型语言模型(LLM)在文本的少样本推理中表现excellent&#xff0c;本文证明LLM在表结构的f复杂少样本推理中表现也很comp…

【数据结构基础】树 - 二叉搜索树(BST)

本文主要介绍 二叉树中最基本的二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0…

入门力扣自学笔记233 C++ (题目编号:2319)

2319. 判断矩阵是否是一个 X 矩阵 题目&#xff1a; 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形…

GitHub2022年十大热门编程语言榜单(上)

全球知名代码托管平台 GitHub发布的2022年GitHub Octoverse年度报告公布了全球最流行的十大编程语言&#xff0c;其中JavaScript蝉联第一&#xff0c;Python位列次席。 编程是技术革新的核心&#xff0c;对于所有的编程开发人员来说&#xff0c;对世界范围内编程语言发展和趋势…

搭WIFI拓扑有感

搭拓扑有感 人类革命&#xff0c;一场N*N的MIMO 关键技术&#xff1a;男女搭配 结婚生子 男女搭配&#xff1a;以搭档为单位调度&#xff0c;节省整体开资&#xff0c;克服短时间的寂寞 CP沟通&#xff1a;在说话间加一个保护间隔&#xff0c;不给对方太大的压力 结婚生子 …

Live800:影响在线客服系统稳定性的因素,有哪些?

稳定性的在线客服系统对企业来说是至关重要的&#xff0c;可以说是企业选择在线客服系统时首要考量的一个因素。一个不稳定的在线客服系统&#xff0c;即使价格再便宜&#xff0c;恐怕也无法满足企业搭建在线客服系统的初衷。想象一下当客户正在咨询问题时&#xff0c;客服系统…

十三、表数据的增、删、改操作

文章目录一、插入数据1.1 使用 INSERT…VALUES 语句插入数据1.2 使用 INSERT…SET 语句插入数据1.3 使用 INSERT...SELECT 语句插入查询结果二、修改(更新)数据三、删除数据3.1 通过 DELETE 语句删除数据3.2 通过 TRUNCATE TABLE 语句删除数据3.3 DELETE 语句和 TRUNCATE TABLE…

爬虫实例(二)—— 爬取高清4K图片

大家好&#xff0c;我是 Enovo飞鱼&#xff0c;今天继续分享一个爬虫案例&#xff0c;爬取高清4K图片&#xff0c;加油&#x1f4aa;。 目录 前言 增加异常处理 增加代码灵活性 基本环境配置 爬取目标网站 分析网站页面 具体代码实现 图片下载示例 感谢支持&#x1f6…

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法1)

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法1) 为什么要设置有效载荷Loaddata? 对于搬运应用的机器人只有设定正确的工具和载荷数据,机器人才能正确的工作; 对于搬运比较重的产品,或工具的重量也比较重,需要设置工具及搬运对象的重心和重量; 对…

如何用ChatGPT高效完成工作

如何用ChatGPT高效完成工作 过完年刚开工&#xff0c;很多人还没有从假期综合症中走出来&#xff0c;不想上班&#xff0c;总想摸鱼&#xff0c;可是手上的工作还是要完成的。都2023年了&#xff0c;是时候让ChatGPT来帮我们完成工作了&#xff01;本文将教你如何用ChatGPT高效…

Unity-Tcp-网络聊天功能(二): 登录与注册

5.客户端实现注册与登录接口创建好UI接下来定义发给客户端的协议等public class MessageHelper {//发送登录的消息给服务器 1002public void SendLoginMsg(string account, string pwd){LoginMsgC2S msg new LoginMsgC2S();msg.account account;msg.password pwd;var str J…

java程序cpu飙高定位

1 定位过程 CPU飙升问题定位的一般步骤是&#xff1a; 首先通过top指令查看当前占用CPU较高的进程PID查看当前进程消耗资源的线程PID&#xff1a;top -Hp PID通过print命令将线程PID转为16进制&#xff0c;根据该16进制值去打印的堆栈日志内查询&#xff0c;查看该线程所驻留…

Plecs电力电子仿真专业教程-第一季

Plecs电力电子仿真专业教程-第一季 第一章 Plecs是什么&#xff1f; 第一节 Plecs简介 Plecs是瑞士Plexim GmbH公司开发的系统级电力电子仿真软件PLECS。PLECS是一个用于电路和控制结合的多功能仿真软件&#xff0c;尤其适用于电力电子和传动系统。不管您是工业领域中的开发…

Lua 面向对象(详解)

Lua 面向对象&#xff08;详解&#xff09; 参考文章&#xff1a; https://blog.csdn.net/linxinfa/article/details/103254828 https://zhuanlan.zhihu.com/p/115159195 https://blog.codingnow.com/cloud/LuaOO https://blog.codingnow.com/2006/06/oo_lua.html Lua的面向对象…

Homekit智能家居DIY-智能插座

WiFi智能插座对于新手接触智能家居产品更加友好&#xff0c;不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷&#xff0c;智能插座就是其中之一&#xff0c;比如外出忘记关空调&#xff0c;可以拿起手机远程关闭。 简单说就是&#xff1a;插座可以连接wi…

不再一个个试错,这众多的flex属性

流式布局 本篇我们将从流式布局的四大方面入手&#xff0c;旨在认识、了解、以至于掌握其特性及功能。 为什么要用&#xff1f; 在我们抛弃标准流、定位流以及浮动流之后&#xff0c;取而代之的是flex流式布局。以一种更加优雅的方式实现元素布局。 轴的定义 在开始说它的特…

C语言#if、##ifdef、#ifndef的用法详解

假如现在要开发一个C语言程序&#xff0c;让它输出红色的文字&#xff0c;并且要求跨平台&#xff0c;在 Windows 和 Linux 下都能运行&#xff0c;怎么办呢&#xff1f;这个程序的难点在于&#xff0c;不同平台下控制文字颜色的代码不一样&#xff0c;我们必须要能够识别出不同…

2023最新版easyrecovery数据恢复软件免费版测评

大家好&#xff0c;关于easyrecovery数据恢复软件免费版很多朋友都还不太明白&#xff0c;今天小编就来为大家分享关于easyrecovery数据恢复软件免费版下载使用的知识&#xff0c;希望对各位有所帮助&#xff01; EasyRecovery其实是目前为止我用的最喜欢的一款数据恢复软件&a…