当前位置: 首页 > news >正文

【java-04】深入浅出多态、内部类、常用API

主要内容

1 多态

1.1 面向对象三大特征 ?

  • 封装 , 继承 , 多态

1.2 什么是多态 ?

  • 一个对象在不同时刻体现出来的不同形态

  • 举例 : 一只猫对象

    • 我们可以说猫就是猫 : Cat cat = new Cat();
    • 我们也可以说猫是动物 : Animal cat = new Cat();
    • 这里对象在不同时刻,体现出来的不同形态 , 我们就可以理解为多态

1.3 多态的前提

  • 有继承/实现关系
  • 有方法重写
  • 父类的引用指向子类的对象
package com.bn.polymorphism_demo;
/*多态的三个前提条件1 需要有继承/实现关系2 需要有方法重写3 父类的引用指向子类的对象*/
public class AnimalTest {public static void main(String[] args) {// 3 父类的引用指向子类的对象// 多态形式对象Animal a = new Cat();}
}class Animal{public void eat(){System.out.println("吃东西");}
}class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼....");}
}

1.4 多态的成员访问特点

  • 构造方法 : 和继承一样 , 子类通过super()访问父类的构造方法
  • 成员变量 : 编译看左边(父类) , 执行看左边(父类)
  • 成员方法 : 编译看左边(父类) , 执行看右边(子类)
package com.bn.polymorphism_demo;/*多态的成员访问特点 :1 构造方法 : 和继承一样 , 都是通过super()访问父类的构造方法2 成员变量 : 编译看左边(父类) , 执行看左边(父类)3 成员方法 : 编译看左边(父类) , 执行看右边(子类) , 注意 , 如果执行时1) 子类没有回动态去找父类中的方法2) 子类的特有方法无法进行调用(多态的缺点)*/
public class MemberTest {public static void main(String[] args) {// 父类的引用指向子类的对象Fu f = new Zi();// 多态对象调用成员变量System.out.println(f.num);// 多态对新乡调用调用成员方法f.show();// 多态对象不能调用子类特有的方法// f.show2();}
}class Fu {int num = 100;public void show() {System.out.println("父类的show方法");}
}class Zi extends Fu {int num = 10;public void show() {System.out.println("子类的show方法");}public void show2(){System.out.println("子类特有的方法");}
}

1.5 多态的优缺点

  • 优点 : 提高代码的扩展性
  • 缺点 : 不能调用子类特有的功能
package com.bn.polymorphism_test;public abstract class Animal {private String breed;private String color;public Animal() {}public Animal(String breed, String color) {this.breed = breed;this.color = color;}public String getBreed() {return breed;}public void setBreed(String breed) {this.breed = breed;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public abstract void eat();
}
package com.itheima.polymorphism_test;public class Cat extends Animal {public Cat() {}public Cat(String breed, String color) {super(breed, color);}@Overridepublic void eat() {System.out.println("猫吃鱼...");}public void catchMouse() {System.out.println("抓老鼠...");}
}
package com.itheima.polymorphism_test;public class Dog extends Animal {public Dog() {}public Dog(String breed, String color) {super(breed, color);}@Overridepublic void eat() {System.out.println("狗吃骨头!");}public void lookDoor(){System.out.println("狗看门...");}
}
package com.itheima.polymorphism_test;public class Pig extends Animal {public Pig() {}public Pig(String breed, String color) {super(breed, color);}@Overridepublic void eat() {System.out.println("猪拱白菜...");}public void sleep() {System.out.println("一直再睡...");}
}
package com.bn.polymorphism_test;/*如果方法的参数是一个类的话 , 那么调用此方法需要传入此类的对象 , 或者子类对象多态的好处 :提高代码的扩展性 , 灵活性多态的缺点:不能调用子类的特有功能*/
public class AnimalTest {public static void main(String[] args) {useAnimal(new Cat());System.out.println("---------");useAnimal(new Dog());System.out.println("---------");useAnimal(new Pig());}public static void useAnimal(Animal a){// Animal a = new Dog()a.eat();// 多态不能访问子类特有的功能// 如果解决 ?// 向下转型if(a instanceof Cat) {Cat cat = (Cat) a;cat.catchMouse();}if(a instanceof Dog) {Dog dog = (Dog) a;dog.lookDoor();}if(a instanceof Pig) {((Pig) a).sleep();}}//    // 定义一个使用猫类的方法
//    public static void useAnimal(Cat c) {// Cat c = new Cat();
//        c.eat();
//        c.catchMouse();
//    }
//
//    // 定义一个使用狗类的方法
//    public static void useAnimal(Dog d) {// Dog d = new Dog();
//        d.eat();
//        d.lookDoor();
//    }
//
//    // 定义一个使用猪类的方法
//    public static void useAnimal(Pig pig) {
//        pig.eat();
//        pig.sleep();
//    }
}

1.6 多态的转型

  • 向上转型 : 把子类类型数据转成父类类型数据 Animal a = new Cat();
  • 向下转型 : 把父类类型数据转成子类类型数据 Cat cat = (Cat)a;

1.7 多态的转型注意

  • 如果被转的对象 , 对应的实际类型和目标类型不是同一种数据类型 , 那么转换时会出现ClassCastException异常

  • 异常代码如下
    public static void main(String[] args) {Animal a = new Cat();useAnimal(a);
    }
    public static void useAnimal(Animal a) {Dog d = (Dog) a;d.eat();
    }

1.8 解决转型安全隐患

  • 使用关键字 instanceof
  • 作用 : 判断一个对象是否属于一种引用数据类型
  • 格式 : 对象名 instanceof 引用数据类型
    • 通俗的理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果

2 内部类

2.1 内部类的分类

  • 什么是内部类 ?
    • 一个A类 中 定义一个B类 , 那么B类就属于A类的内部类 , A类就属于B类的外部类

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VuEm1oe-1683555713951)(D:\传智播客\上海-JavaSE进阶面授\day03【多态,内部类 , 常用API 1】\笔记\img\image-20210402191054318.png)]

  • 什么时候使用内部类 ?
    • 多个事物之间有包含关系, 可以使用内部类
  • 内部类分类 ?
    • 成员内部类
    • 局部内部类
    • 匿名内部类

2.2 成员内部类

  • 定义的位置 : 类中方法外

  • 创建成员内部类对象格式 : 外部类名.内部类名 对象名 = new 外部类名().new 内部类名(参数);

    package com.bn.innerclass_demo.member_innerclass;// 外部类
    public class Person {// 成员内部类public class Heart {// 频率变量private int rate;// 跳动方法public void beats() {System.out.println("咚咚咚!");}}
    }class Test {public static void main(String[] args) {// 创建内部类对象Person.Heart heart = new Person().new Heart();// 调用内部类中的方法heart.beats();}
    }
    
  • 成员内部类访问外部类的成员
    • 在内部类中有代表外部类对象的格式 : 外部类名的.this , 私有的也可以访问
    • 外部类要想访问内部类成员 , 需要创建内部类对象
    package com.bn.innerclass_demo.member_innerclass;public class Person {private String name = "张三";private int num = 10;// 成员内部类public class Heart {int num = 100;// 频率private int rate;// 跳动public void beats() {System.out.println("咚咚咚!");}// 调用外部类的成员public void show(){int num = 1000;System.out.println(Person.this.name);System.out.println(num);// 1000 就近原则System.out.println(this.num);// 100System.out.println(Person.this.num);// 10}}
    }class Test {public static void main(String[] args) {Person.Heart heart = new Person().new Heart();heart.beats();heart.show();}
    }
    

2.3 匿名内部类

  • 匿名内部类 : 没有名字的类 , 一次性产品
  • 使用场景 : 直接调用方法 , 作为方法的传参 , 返回值类型
  • 好处 : 简化代码 , 快速实现接口或者抽象的抽象方法
  • 格式 :
    • new 类名/接口名(){ 重写抽象方法 } 注意 : 此处创建的是子类对象!!!
  • 使用方式 :
    • 直接调用方法
    • 作为方法的参数传递
    • 作为方法的返回值类型
//接口
interface Flyable {void fly();
}
// 直接调用方法
Flyable f1 = new Flyable() {@Overridepublic void fly() {System.out.println("不知道什么在飞.....");}
};
f1.fly();
// 作为方法的参数传递
showFlyable(new Flyable() {@Overridepublic void fly() {System.out.println("不知道什么在飞3333");}}
);public static void showFlyable(Flyable flyable) {flyable.fly();
}
// 作为方法的返回值类型
public static Flyable getFlyable() {return new Flyable() {@Overridepublic void fly() {System.out.println("3333333333333");}};
}
package com.bn.innerclass_demo.anonymous_innerclass;/*1 如果方法的参数是一个类的话 , 调用此方法需要传入此类的对象或者此类的子类对象2 如果方法的返回值类型是一个类的话 , 需要返回此类的对象 , 或者此类的子类对象3 如果方法的参数是一个接口的话 , 调用此方法需要传入此接口的实现类对象4 如果方法的返回值类型是一个接口的话 , 需要返回此接口的实现类对象匿名内部类 : 代表的就是子类对象!!!new 类名/接口名(){重写抽象类或者接口中的抽象方法};使用方向 :1 调用方法2 作为方法参数传递3 作为方法的返回值*/
public interface Swim {public abstract void swimming();
}class Test {public static void main(String[] args) {
//        // 子类对象!!!//  1 调用方法
//       new Swim() {
//            @Override
//            public void swimming() {
//                System.out.println("匿名内部类 , 重写了接口中的抽象方法...");
//            }
//        }.swimming();//        //   2 作为方法参数传递
//        useSwim(new Swim() {
//            @Override
//            public void swimming() {
//                System.out.println("匿名内部类 , 重写了接口中的抽象方法...");
//            }
//        });//        // 3 作为方法的返回值
//        Swim s = getSwim();
//        s.swimming();}public static Swim getSwim() {return new Swim() {@Overridepublic void swimming() {System.out.println("匿名内部类 , 重写了接口中的抽象方法...");}};}/*Swim swim = new Swim() {@Overridepublic void swimming() {System.out.println("匿名内部类 , 重写了接口中的抽象方法...");}};*/public static void useSwim(Swim swim) {swim.swimming();}
}

3 API

3.1 Object类

  • 概述 : 类Object是类层次结构的根,每个类都把Object作为超类。 所有对象(包括数组)都实现了这个类的方法
  • 方法 : public String toString()
    • 如果一个类没有重写toString方法 , 那么打印此类的对象 , 打印的是此对象的地址值
    • 如果一个类重写了toString方法 , 那么打印此类的对象 , 打印的是此对象的属性值
    • 好处 : 把对象转成字符串 , 快速查看一个对象的属性值
    • 执行时机 : 打印对象时会默认调用toString方法
  • 方法 : public boolean equals()
    • 如果一个类没有重写equals方法 , 那么比较此类的对象 . 比较的是地址值
    • 如果一个类重写了equals方法 . 那么比较此类的对象 , 比较的是属性值是否相等
    • 好处 : 可以比较对象的内容

3.2 Objects类

  • Objects是JDK1.7新增的一个对象工具类,里面都是静态方法可以用来操作对象。比如对象的比较,计算对象的hash值,判断对手是否为空…比如里面的equals方法,可以避免空指针异常
public static boolean equals(Object a, Object b):判断两个对象是否相等public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));
}
a.equals(b) :如果a是null值,肯定会空指针
Objects.equals(a,b);:如果a是null,不会导致空指针异常

3.2 Date类

package com.bn.api_demo.date_demo;import java.util.Date;/*Date类 : 代表的是一个瞬间 , 精确到毫秒构造方法 :public Date() : 代表的是当前系统时间public Date(long date) : Date对象 = 1970/1/1 0:0:0 + long类型的毫秒值成员方法 :public void setTime(long date) : Date对象 = 1970/1/1 0:0:0 + long类型的毫秒值public long getTime() : 返回的是毫秒值 = Date代表的时间 - 1970/1/1 0:0:0*/
public class DateDemo {public static void main(String[] args) {//  public Date() : 代表的是当前系统时间
//        Date d = new Date();
//        System.out.println(d);//  public Date(long date) : Date对象 = 1970/1/1 0:0:0 + long类型的毫秒值
//        Date d2 = new Date(1000L * 60 * 60 * 24); // 1970/1/1 0:0:0 + 一天的毫秒值
//        System.out.println(d2);Date d = new Date();// public void setTime(long date) : Date对象 = 1970/1/1 0:0:0 + long类型的毫秒值// d.setTime(1000L * 60 * 60 * 24);System.out.println(d);// public long getTime() : 返回的是毫秒值 = Date代表的时间 - 1970/1/1 0:0:0// System.out.println(d.getTime());}
}

3.3 DateFormat类

  • 概述 : 主要用于操作日期格式的一个类

  • 作用 :

    • 格式化 : Date --> String
    • 解析 : String --> Date
  • 构造方法 :

    • SimpleDateFormat(String pattern) 给定日期模板创建日期格式化对象

  • 成员方法 :

    • public String format ( Date d ):格式化,将日期对象格式化为字符串
    • public Date parse ( String s ):解析,将字符串解析为日期对象
package com.bn.api_demo.dateformat_demo;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*SimpleDateFormat类 :"2021年04月03日 16:48:10"  ---> DateDate(Sat Apr 03 16:41:38 CST 2021) --> "2021年04月03日 16:48:10"作用 :格式化 : Date --> String解析   : String --> Date构造方法 :public SimpleDateFormat(String pattern) : pattern : 字符串类型的日期模板成员方法 ;public final String format(Date date) : 接收一个Date对象返回指定模式的字符串public Date parse(String source) : 接收一个字符串  , 返回一个Date对象1 获取当前的日期对象,使用格式:yyyy-MM-dd HH:mm:ss 来表示,例如:2020-10-31 17:00:00【格式化】2 将字符串的 2020年10月31日  17:00:00,转换为日期Date对象。【解析】*/
public class SimpleDateFormatDemo {public static void main(String[] args) throws ParseException {// 解析   : String --> DateString strDate = "2020年10月31日 17:00:00";// 注意 : 解析时 , SimpleDateFormat的参数(日期模板) , 必须和要解析字符串的模式匹配SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//  public Date parse(String source) : 接收一个字符串  , 返回一个Date对象Date date = sdf.parse(strDate);System.out.println(date); // Sat Oct 31 17:00:00 CST 2020}private static void method() {// 格式化 : Date --> String// 获取当前系统时间Date date = new Date();// System.out.println(date);// Sat Apr 03 16:53:35 CST 2021// public SimpleDateFormat(String pattern) : pattern : 字符串类型的日期模板SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");// public final String format(Date date) : 接收一个Date对象返回指定模式的字符串String strDate = sdf.format(date);System.out.println(strDate);}
}
战狼	吴京	120.0	0.0	20.0	120	19-12-12 下午12:12

3.4 Calendar类

  • 概述 :
    • java.util.Calendar类表示日历,内含有各种时间信息,以及获取,计算时间的方法。
    • Calendar本身是一个抽象类,可以通过Calendar提供的静态方法getInstance日历子类对象
  • Calendar常用方法 :
    方法名说明
    public static Calendar getInstance()获取一个它的子类GregorianCalendar对象。
    public int get(int field)获取指定日历字段的时间值。
    public void set(int field,int value)设置指定字段的时间值
    public void add(int field,int amount)为某个字段增加/减少指定的值
  • get,set,add方法参数中都有一个整数类型的参数field,field用来区分当前要获取或者操作的日期时间数据的。field数据的值使用Calender中定义的整数常量来表示

    • Calendar.YEAR : 年
    • Calendar.MONTH :月
    • Calendar.DAY_OF_MONTH:月中的周
    • Calendar.HOUR:小时
    • Calendar.MINUTE:分钟,
    • Calendar.SECOND:秒
    • Calendar.DAY_OF_WEEK:星期
  • 星期对应的关系

    ​ 字段时间值 : 1 2 3 … 7
    ​ 真正的时间 : SUNDAY MONDAY TUESDAY … SATURDAY

  • 月份对应的关系

    ​ 字段时间值 : 0 1 … 11
    ​ 正真的时间 : JANUARY FEBRUARY … DECEMBER

package com.bn.api_demo.calendar_demo;
/*月份对应的关系字段时间值     :       0           1           ....        11正真的时间     :     JANUARY     FEBRUARY      ....      DECEMBER*/
import java.util.Calendar;
/*成员方法 :public int get(int field)	获取指定日历字段的时间值。public void set(int field,int value)	设置指定字段的时间值public void add(int field,int amount)	为某个字段增加/减少指定的值*/
public class CalendarDemo {public static void main(String[] args) {// 获取Calendar对象 , rightNow对象Calendar rightNow = Calendar.getInstance();// public void set(int field , int value)	设置指定字段的时间值// rightNow.set(Calendar.YEAR , 2024);// rightNow.set(Calendar.MONTH , 5);// rightNow.set(Calendar.DAY_OF_MONTH, 10);// public void add(int field,int amount)	为某个字段增加/减少指定的值// rightNow.add(Calendar.DAY_OF_MONTH , -3);//  public int get(int field)	 : 获取指定日历字段的时间值。int year = rightNow.get(Calendar.YEAR);int month = rightNow.get(Calendar.MONTH);int day = rightNow.get(Calendar.DAY_OF_MONTH);System.out.println(year); // 2021System.out.println(month);// 3System.out.println(day);  // 3}
}
package com.bn.api_demo.calendar_demo;import java.util.Calendar;/*1 写代码使用get方法,将年,月,日,时,分,秒,周获取出来特别注意获取月份,和星期有以下特点:直接获取的月份数据是从0开始的, 0表示1月,.....11表示12月周的获取,从周日开始计算,1就是周日,2就是周一 ......7就是周六星期对应的关系字段时间值  :   1           2            3          ...        7真正的时间  : SUNDAY        MONDAY      TUESDAY     ...        SATURDAY月份对应的关系字段时间值     :       0           1           ....        11正真的时间     :     JANUARY     FEBRUARY      ....      DECEMBER*/
public class Test1 {public static void main(String[] args) {// 拿到当前时间Calendar now = Calendar.getInstance();System.out.println(now.get(Calendar.YEAR));System.out.println(now.get(Calendar.MONTH));System.out.println(now.get(Calendar.DAY_OF_MONTH));System.out.println(now.get(Calendar.HOUR));System.out.println(now.get(Calendar.MINUTE));System.out.println(now.get(Calendar.SECOND));int week = now.get(Calendar.DAY_OF_WEEK);// 7System.out.println(getWeek(week));// 字段值}public static String getWeek(int field){String[] str = { "" , "SUNDAY" , "MONDAY" , "TUESDAY" , "WEDNESDAY" , "THURSDAY" , "FRIDAY" , "SATURDAY"};return str[field];}
}
package com.itheima.api_demo.calendar_demo;import java.util.Calendar;/*2 写代码实现,获取2022年10月1日是星期几?参考思路:直接获取日历对象,得到的是当前系统的日历时间信息。获取日历对象后,要重新设置日期再获取星期数据*/
public class Test2 {public static void main(String[] args) {Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, 2022);cal.set(Calendar.MONTH, 9);cal.set(Calendar.DAY_OF_MONTH, 1);int week = cal.get(Calendar.DAY_OF_WEEK);System.out.println(getWeek(week));// 字段值}public static String getWeek(int field){String[] str = { "" , "SUNDAY" , "MONDAY" , "TUESDAY" , "WEDNESDAY" , "THURSDAY" , "FRIDAY" , "SATURDAY"};return str[field];}
}
package com.bn.api_demo.calendar_demo;import java.util.Calendar;/*3 计算10000天之后的年月日参考思路:先获取当前日历对象再调用add方法,指定DATE或者DAY_OF_MONTH,添加10000天再获取日历的年,月,日*/
public class Test3 {public static void main(String[] args) {Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_MONTH, 10000);System.out.println(cal.get(Calendar.YEAR));System.out.println(cal.get(Calendar.MONTH));System.out.println(cal.get(Calendar.DAY_OF_MONTH));}
}

3.5 Math类

  • 概述 : Math包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。所提供的都是静态方法,可以直接调用

  • 常用方法 :

    public static int abs(int a)获取参数a的绝对值:
    public static double ceil(double a)向上取整
    public static double floor(double a)向下取整
    public static double pow(double a, double b)获取a的b次幂
    public static long round(double a)四舍五入取整

3.6 System类

  • System类包含几个有用的类字段和方法。 它不能被实例化

  • 常用方法 :

    方法名说明
    public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
    public static long currentTimeMillis()返回当前时间(以毫秒为单位)

相关文章:

【java-04】深入浅出多态、内部类、常用API

主要内容 多态 内部类 常用API 1 多态 1.1 面向对象三大特征 ? 封装 , 继承 , 多态 1.2 什么是多态 ? 一个对象在不同时刻体现出来的不同形态 举例 : 一只猫对象 我们可以说猫就是猫 : Cat cat new Cat();我们也可以说猫是动物 : Animal cat new Cat();这里对象在不…...

【逐函数详细讲解ORB_SLAM2算法和C++代码|Viewer|1-26】

Viewer类的主要目的是实现ORB-SLAM2算法的可视化部分,帮助用户更好地理解算法的运行过程和结果。为此,Viewer类与其他类(如System、FrameDrawer、MapDrawer和Tracking)协同工作,根据摄像机的帧率实时更新可视化界面。 在Viewer类中,有一些成员变量和成员函数。 成员变量…...

【C语言】测试2 C程序设计初步

以下能正确定义整型变量 a,b 和 c,并对它们赋初值为5的语句是( )。 A. int a=b=c=5; B. int a, b, c=5; C. int a=5, b=5, c=5; D. a=b=c=5; 正确答案: C 当输入数据的形式为:25,13,10<回车 >时,以下程序的输出结果为( )。 main() {int x,y,z; scanf(“ %…...

SpringBoot3 integrate SpringDoc

SpringDoc 官方文档 Springdoc3取代swagger2 pom xml加载Springdoc JarOpenAPIDefinition&#xff0c;声明一个OpenAPI对API进行分组&#xff0c;方便查询访问地址springdoc ConfigurationRequestMapping pom xml加载Springdoc Jar <dependency><groupId>org.sprin…...

一文解决Xshell无法连接vmware上的centos

问题描述 win10系统上安装VMware workstation16 pro&#xff0c;装好后安装centos虚拟机&#xff0c;在设置network & hostname时选择的NAT模式&#xff0c;即使用自定义的网关和IPv4地址&#xff0c;最后配置完成后centos主机地址信息如下&#xff0c;在虚拟机内部进行pi…...

ATTCK v13版本战术介绍——防御规避(五)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术&#xff0c;本期我们为大家介绍ATT&CK 14项战术中防御规避战术第25-30种子技术&#xff0c;后续会介绍防御规避其他子技术&#xf…...

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说

在祁宁家里&#xff0c;有一套完整的赛车模拟器&#xff0c;他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友&#xff0c;除了享受速度与激情带来的愉悦感&#xff0c;祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…...

linux安装

1. 准备前说明 本文采用的是CentOS6.8&#xff0c;64位的&#xff0c;虚拟机时VMvare&#xff0c;采用的是双网卡方式。至于双网卡的作用和nat&#xff0c;桥接和hostonly模式请参见我的另一篇文章。安装回环网卡&安装Linux前准备 2. 废话不多说&#xff0c;开始了 ◆打…...

【Go编程语言】 Go语言基础语法

Go语言基础语法 文章目录 Go语言基础语法一、注释1.单行注释2.多行注释 二、变量1.变量的定义2.变量的初始化3.理解变量&#xff08;内存地址&#xff09;4.变量交换5.匿名变量6.变量的作用域 三、常量1.常量的定义&#xff1a; const2.iota&#xff08;特殊常量&#xff09; 四…...

洗稿用什么软件-洗稿软件免费

洗稿文章的主要优势 洗稿文章的主要优势在于提高文章的质量和效率。以下是洗稿文章的几个主要优势&#xff1a; 优化结构和语言 洗稿可以删除冗余、无用和重复的内容&#xff0c;同时对文章的结构和语言进行优化&#xff0c;提高文章的可读性和吸引力。这可以使文章更加专业…...

网络请求发送

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…...

微信小程序开发

文章目录 1 开发准备工作2 小程序开发工具使用3 初始化项目4 index页静态搭建5 数据绑定5.1 初始化数据5.2 使用数据5.3 修改数据 6 数据绑定---小程序&#xff0c;Vue&#xff0c;React7 事件绑定7.1 事件分类7.2 绑定事件7.3 向事件对象传参7.4 补充&#xff1a;事件流的三个…...

number类型超出16位的问题(前端、后端处理)

目录 1、前端解决方案 1.1 甩链接 1.2 接口返回数据过程中将数据处理为字符串&#xff08;过过嘴瘾&#xff09; 1.3 对返回的json字符串进行数据预处理代码如下 2、后端解决方案 2.1 toString、String、 、new String() 自己悟、就是要改的地方多。 2.2拦截器 (可能超出…...

【高并发】网络模式

I/O 多路复用 多线程创建 服务器的主进程负责监听客户的连接&#xff0c;一旦与客户端连接完成&#xff0c;accept() 函数就会返回一个「已连接 Socket」&#xff0c;这时就通过 fork() 函数创建一个子进程&#xff0c;实际上就把父进程所有相关的东西都复制一份&#xff0c;…...

springboot+dubbo+zookeeper 项目实战

现在有一段代码再前台&#xff0c;后台系统中都存在&#xff0c;都需要这段代码&#xff0c;存在这种情况&#xff0c;我们可以选择将这段代码提取出来作为一个服务&#xff0c;让前台和后台系统作为消费者远程调用这段代码&#xff0c;提高了代码的复用性。 springboot集成dub…...

PHP学习笔记第一天

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 PHP语法 基本的PHP语法 PHP的数据类型 PH…...

案例研究|萤石网络通过JumpServer解决安全运维难题

杭州萤石网络股份有限公司&#xff08;以下简称为萤石网络&#xff09;于2015年在杭州成立&#xff0c;是安全智能生活主流品牌&#xff0c;核心产品包括智能家居摄像头、智能门锁、智能服务机器人等。2021年&#xff0c;萤石网络家用摄像头占国内出货量市场份额的25%&#xff…...

即时聊天app开发-即时通讯app开发方案分析

如今&#xff0c;即时聊天APP层出不穷&#xff0c;它已经成为人们日常生活中密不可分的社交工具。如今&#xff0c;即时聊天APP不仅是聊天工具&#xff0c;也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要&#xff0c;用户可以直接点击广告了解详情。即时…...

js为什么会阻塞渲染, 什么是异步?

javaScript 是单线程执行的语言&#xff0c;它的执行机制是基于事件循环模型的。当 JavaScript 执行代码时&#xff0c;如果遇到阻塞&#xff08;如执行时间较长的代码、同步的网络请求、计算密集型操作等&#xff09;&#xff0c;则会阻塞 JavaScript 引擎的执行&#xff0c;直…...

Nuvoton NK-980IOT开发板 u-boot 编译

前言 最近搭建了 Nuvoton NK-980IOT开发板 的开发编译环境&#xff0c;记录一下 u-boot 的 编译流程 Nuvoton NK-980IOT开发板 资源还是比较的丰富的&#xff0c;可以用于 嵌入式Linux 或者 RT-Thread 的学习开发 开发板上电比较的容易&#xff0c;两根 USB 线即可&#xff0…...

OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射

随着OpenCL的普及&#xff0c;现在有越来越多的移动设备以及平板、超级本等都支持OpenCL异构计算。而这些设备与桌面计算机、服务器相比而言性能不是占主要因素的&#xff0c;反而能耗更受人关注。因此&#xff0c;这些移动设备上的GPU与CPU基本都是在同一芯片上&#xff08;So…...

浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)

在osgEarth操控器类的EarthManipulator中的如下函数&#xff1a; void EarthManipulator::setLookAt(const osg::Vec3d& center,double azim,double pitch,double range,const osg::Vec3d& posOffset) {setCenter( center );.... //…...

PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会

大家好&#xff0c;今天我们来聊一下程序员这个职业的特点。在讲这个话题之前&#xff0c;我先说一下我自己的情况&#xff1a;我在福州和深圳做了8年左右的程序员&#xff0c;然后回到老家&#xff0c;在家里面为福州的一个公司做远程开发。目前已经在老家做了将近3年。 今天…...

【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法

目录 一、背景意义二、基本原理三、算法介绍3.1 数字水印嵌入3.2 数字水印提取 四、程序实现 一、背景意义 数字水印技术作为信息隐藏技术的一个重要分支&#xff0c;是将信息(水印)隐藏于数字图像、视频、音频及文本文档等数字媒体中&#xff0c;从而实现隐秘传输、存储、标注…...

最全的免费SSL证书申请方式

在SSL广泛普及的今天&#xff0c;申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站&#xff0c;文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式&#xff0c;大家可以根据自己的…...

Ceph入门到精通-CrushMap算法概述

下面是伪代码object到osd的伪代码 locator =object_name obj_hash =hash(locator) pg =obj_hash %num_pg OSDs_for_pg =crush(pg) # returns a list of OSDs primary =osds_for_pg[0] replicas =osds_for_pg[1:] defcrush(pg): all_osds=[osd.0,osd.1,osd.2,...] resu…...

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展&#xff0c;电子商务成为了众多企业的首选模式&#xff0c;而开放API则成为了电商业务中不可或缺的部分。API&#xff08;Application Programming Interface&#xff09;&#xff0c;即应用程序接口&#xff0c;是软件系统不同组件之间交互的约定。电…...

Give me a logic game idea about economics

Here’s an logic game idea about economics: Game name: “Economics Tycoon” Game Objective: Build an economic empire and grow from a small business owner to a global tycoon. Gameplay: Start with a small business and limited resources. Manage your compa…...

测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…...

配置Windows终端直接执行Python脚本,无需输入“python“

配置Windows终端直接执行Python脚本&#xff0c;无需输入"python" 1. 将Python加入环境变量2. 将Python后缀加入环境变量PATHEXT中3. 修改Python脚本的默认打开方式4. *将Python脚本命令加入环境变量*5. 测试 在Linux系统中&#xff0c;在Python脚本的开头指定Python…...