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

初识Java 9-1 内部类

 

目录

创建内部类

到外部类的链接

使用.this和.new

内部类和向上转型

在方法和作用域中的内部类

匿名内部类

嵌套类

接口中的类

从多嵌套的内部类中访问外部人员


本笔记参考自: 《On Java 中文版》


        定义在另一个类中的类称为内部类。利用内部类,将逻辑上存在关联的类组织在一起,并且可以控制一个类在另一个类中的可见性。

创建内部类

        创建内部类的方式就是把类定义在一个包围它的类中。

public class Parcel_1 {class Contents {private int i = 1;public int value() {return i;}}class Destination {private String label;Destination(String whereTo) {label = whereTo;}String readLabel() {return label;}}// 内部类的使用看起来和使用其他类没有区别public void ship(String dest) {Contents c = new Contents();Destination d = new Destination(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel_1 p = new Parcel_1();p.ship("一串字符串");}
}

        程序执行,输出:一串字符串

        在上述程序中,ship()方法进行了内部类对象的创建,这与使用普通类并无什么区别。除了这种使用内部类的方式外,在外部类中设置一个方法,用来返回一个指向内部类的引用,这种形式也很常见:

public class Parcel_2 {class Contents {private int i = 1;public int value() {return i;}}class Destination {private String label;Destination(String whereTo) {label = whereTo;}String readLabel() {return label;}}public Destination toDest(String s) {return new Destination(s);}public Contents toCon() {return new Contents();}public void ship(String dest) {Contents c = toCon();Destination d = toDest(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel_2 p_1 = new Parcel_2();p_1.ship("第二串字符串");Parcel_2 p_2 = new Parcel_2();// 定义指向内部类的引用Parcel_2.Contents c = p_2.toCon();Parcel_2.Destination d = p_2.toDest("这是一个输入");}
}

        在外部类的非静态方法之外的任何地方创建内部类的对象,其对象类型的指定需要遵循以下格式:

OuterClassName.InnerClassName

到外部类的链接

    对于一个负责创建内部类对象的特定外围类对象而言,内部类对象会获得一个隐藏的指向外围类的引用。

        当创建一个内部类时,这个内部类的对象中会隐含一个链接,这个链接用于创建该对象的外围对象。通过这一链接,无需任何条件就可以直接访问外围对象的成员。除此之外,内部类还拥有对外围对象所有元素的访问权

interface Selector {boolean end();Object current();void next();
}public class Sequence {private Object[] items;private int next = 0;public Sequence(int size) {items = new Object[size];}public void add(Object x) {if (next < items.length)items[next++] = x;}private class SequenceSelector implements Selector {private int i = 0;@Overridepublic boolean end() {return i == items.length;}@Overridepublic Object current() {return items[i];}@Overridepublic void next() {if (i < items.length)i++;}}public Selector selector() {return new SequenceSelector();}public static void main(String[] args) {Sequence sequence = new Sequence(10);for (int i = 0; i < 10; i++)sequence.add(Integer.toString(i));Selector selector = sequence.selector();while (!selector.end()) {System.out.print(selector.current() + " ");selector.next();}System.out.println();}
}

        程序执行的结果是:

        通过sequence中的每一个对象,可以使用Selector接口。这就是一个迭代器设计模式的例子。因为Selector是一个接口,其他类可以使用自己的方式去实现这一接口,而其他方法可以通过Selector这个接口去创建更加通用的代码。

        注意,上述程序中,private字段items并不是内部类SequenceSelector的一部分,但是内部类的end()current()next()方法都使用到了该引用。这就是因为内部类可以访问外围对象的所有方法和字段

使用.this和.new

        要在内部类中生成外部类对象的引用,可以使用 外部类的名字+.this

public class DotThis {void f() {System.out.println("这是外部类DoThis的f()");}public class Inner {public DotThis outer() {return DotThis.this;// 若直接使用this,得到的是一个Inner类的引用}}public Inner inner() {return new Inner();}public static void main(String[] args) {DotThis dt = new DotThis();DotThis.Inner dti = dt.inner();dti.outer().f();}
}

        程序执行,输出:这是外部类DoThis的f()

        若要创建内部类的对象,我们还需要使用其外部类的对象。此时会使用到.new语法:

public class DotNew {public class Inner {}public static void main(String[] args) {DotNew dn = new DotNew();DotNew.Inner dni = dn.new Inner();}
}

        通过这种方式,解决了内部类的名字作用域问题。也因此,不需要使用 dn.new DotNew.Inner() 这种更加冗余的方式(不过这种方式也确实不被允许使用)。

        .new的使用例(部分代码重复多次,因此这次放入图片)

        内部类的对象会隐式地连接到用于创建它的外部类对象

    在之后会出现,嵌套类(static修饰的内部类)不需要指向外部类对象的引用。

内部类和向上转型

        内部类在进行向上转型,特别是转型为接口时有其独特的优势。因为内部类(即接口的实现)对外部而言是不可见、不可用的,这会方便隐藏实现:外部类只会获得一个指向基类或接口的引用。

        还是引用之前的例子,假设现在存在两个接口DestinationContents

        正如图中所示的,这两个接口可以让客户程序员进行使用。若客户程序员得到的是一个指向这些接口(指向基类同理)的引用,那么他们就无法从这个引用中得知其确切的类型:

class Parcel_4 {private class PContents implements Contents { // 访问权限为private,无法从外部直接访问private int i = 1;@Overridepublic int value() {return i;}}protected final class PDestination implements Destination {private String label;private PDestination(String whereTo) {label = whereTo;}@Overridepublic String readLabel() {return label;}}public Destination destination(String s) {return new PDestination(s);}public Contents contents() {return new PContents();}
}public class TestParcel {public static void main(String[] args) {Parcel_4 p = new Parcel_4();Contents c = p.contents();Destination d = p.destination("这是第四串字符串");// 注意:不能访问private类// Parcel_4.PContents pc = p.new PContents();}
}

        在Parcel_4中,内部类PContentsprivate的,这表示只有Parcel_4有权对其进行访问。另外,PDestinationprotected的,这表示其的访问权限同样是受限的。

    不能向下转型为访问权限是private的内部类(若无继承关系,也无法向下转型为protected的内部类)。

        private内部类为类的设计者提供了一种方式,这种方式可以完全阻止任何与类型有关的编码依赖,并且可以完全隐藏实现细节。

在方法和作用域中的内部类

        内部类可以在一个方法或是任何一个作用域内创建。有两个理由支持这种做法:

  1. 像上述例子中展示的,需要实现某种接口,以便创建和返回一个引用
  2. 为解决一个复杂问题,在自己的解决方案中创建了一个类用于辅助,但不希望这个类被公开

局部内部类

        修改之前的例子,现在创建一个局部内部类。这种类是一个完整的类,它存在于一个方法的作用域中:

public class Parcel_5 {public Destination destination(String s) {final class PDestination implements Destination {private String label;private PDestination(String whereTo) {label = whereTo;}@Overridepublic String readLabel() {return label;}}return new PDestination(s);}public static void main(String[] args) {Parcel_5 p = new Parcel_5();Destination d = p.destination("这也是一个字符串");}
}

        在上述程序中,PDestination类是destination()方法的一部分,而不是Parcel_5的一部分因此,PDestinationdestination()外是无法访问的。另外,尽管PDestination类在是destination()进行了定义,但即使destination()方法已经返回,PDestination的对象依旧会是合法的

    在同一子目录下的每一个类中,都可以使用类标识符PDestination来命名内部类,这不会产生命名冲突。

        接下来的例子会展示如何如何将内部类嵌入到一个条件判断的作用域中:

public class Parcel_6 {private void internalTracking(Boolean b) {if (b) {class TrackingSlip {private String id;TrackingSlip(String s) {id = s;}String getSlip() {return id;}}TrackingSlip ts = new TrackingSlip("可以使用");String s = ts.getSlip();}// 超出if的作用域,无法使用内部类// TrackingSlip ts = new TrackingSlip("不能使用");}public void track() {internalTracking(true);}public static void main(String[] args) {Parcel_6 p = new Parcel_6();p.track();}
}

        上述程序中,虽然内部类被布置到了if语句中,但这并不表示这个内部类的创建是有条件的,它会与其他代码一起被编译。


匿名内部类

        一个内部类可以是匿名的:这种类通常会与方法返回值的创建结合在一起,在值被返回之前插入一个类的定义。

public class Parcel_7 {// Contents是之前声明的接口,它的方法未被定义public Contents contents() {return new Contents() { // 在进行返回时,插入类的定义private int i = 1;@Overridepublic int value() {return i;}}; // 必要的分号}public static void main(String[] args) {Parcel_7 p = new Parcel_7();Contents c = p.contents();}
}

        这段代码看起来是在准备创建一个Contents的对象,但返回值却被插入了一个类的定义:

return new Contents() { // ...
};

这种语法的意思是“创建一个继承自Contents的匿名类的对象”。在这里,通过new表达式返回的引用会被自动向上转型为一个Contents引用。上述的匿名内部类的语法是以下代码的缩写:

---

        另外,上面展示的匿名内部类中,Contents是用无参构造器创建的。若基类需要的是一个带有参数的构造器,那么:

        首先,这个匿名内部类的基类构造器需要带有参数:

public class Wrapping { // 基类Wrappingprivate int i;public Wrapping(int x) { // 含参构造器i = x;}public int value() {return i;}
}

        尽管Wrapping只是一个带有实现的普通类,但它也是其子类的公共“接口”。

        然后是匿名内部类的创建:

public class Parcel_8 {public Wrapping Wrapping(int x) {return new Wrapping(x) { // 需要将合适的参数传递给基类构造器@Overridepublic int value() {return super.value() * 12;}}; // 这个分号标记表达式的结束,但它刚好包含了这个匿名类}public static void main(String[] args) {Parcel_8 p = new Parcel_8();Wrapping w = p.Wrapping(10);}
}

        上述程序中,return语句末尾的分号标记着表达式的结束,但它并不会标记类体的结束。

---

        若正在构建一个匿名类,并且这个匿名类一定需要使用这个匿名类外部定义的对象,此时,编译器会要求被使用的参数引用使用final修饰,或是“实际上的最终变量”(这种变量在初始化后不再改变,因此被视为final)。

public class Parcel_9 {public Destination destination(final String dest) {return new Destination() {private String label = dest;@Overridepublic String readLabel() {return label;}};}public static void main(String[] args) {Parcel_9 p = new Parcel_9();Destination d = p.destination("这里是Parcel_9");}
}

        在上述程序中,方法destination()的参数可以不用加上final,但通常会把final写上作为提示。

---

        由于匿名类没有名字,所以也不可能有命名的构造器。但如果我们必须对匿名类执行某个类似于构造器的动作,这应该怎么办?借助实例初始化,就可以在效果上为匿名内部类创建一个构造器:

abstract class Base {Base(int i) {System.out.println("这是Base的构造器,i = " + i);}public abstract void f();
}public class AnonymousConstructor {public static Base getBase(int i) {return new Base(i) {{ // 进行实例初始化System.out.println("内部类的实例初始化");}@Overridepublic void f() {System.out.println("匿名类的f()");}};}public static void main(String[] args) {Base base = getBase(10);base.f();}
}

        程序执行的结果是:

        在这里,传入匿名类的变量i并不一定需要是最终变量,尽管i被传入匿名类的基类构造器,但匿名类内部没有直接使用到它。而下方的程序中,由于匿名类使用了参数,所以被使用的参数必须是最终变量:

public class Parcel_10 {public Destination destination(final String dest, final float price) {return new Destination() {private int cost;{// 为每个对象执行实例初始化cost = Math.round(price);if (cost > 100)System.out.println("太贵了吧!");}private String label = dest;@Overridepublic String readLabel() {return label;}};}public static void main(String[] args) {Parcel_10 p = new Parcel_10();Destination d = p.destination("买什么好呢?", 120);}
}

        实例初始化操作中包含了一段if语句,这段if语句不能作为字段初始化的一部分来执行。在效果上,实例初始化部分就是匿名内部类的构造器。但因为我们无法重载实例初始化的部分,所以只能有一个这样的构造器。

    与普通的继承相比,匿名构造器只能扩展一个类,或是实现一个接口,且二者不能兼得。

嵌套类

        将内部类设置为static的,这就变成了嵌套类。这种类不同与普通的匿名类:

  1. 不需要一个外部类对象来创建嵌套类对象;
  2. 无法从嵌套类对象内部访问非static的外部类对象。

        除此之外,嵌套类内部还能存放其他嵌套类,或者static数据及static字段。这些是普通内部类无法做到的:

public class Parcel_11 {// 嵌套类:带有static的内部类private static class ParceContents implements Contents {private int i = 1;@Overridepublic int value() {return i;}}protected static final class ParceDestination implements Destination {private String label;private ParceDestination(String whereTo) {label = whereTo;}@Overridepublic String readLabel() {return label;}// 嵌套类可以包含其他静态元素public static void f() {}static int x = 10;static class AnotherLevel {public static void f() {}static int x = 10;}}public static Destination destination(String s) {return new ParceDestination(s);}public static Contents contents() {return new ParceContents();}public static void main(String[] args) {Contents c = contents();Destination d = destination("不知道写什么,随便写点");}
}

        普通内部类(即非static的)可以使用特殊的this引用创建向外部类对象的连接。而嵌套类没有特殊的this引用,这使得它和static方法类似。

接口中的类

        嵌套类可以是接口的一部分,因为类是static的,所以被嵌套的类只是被放到了这个接口的命名空间里。甚至于,可以在嵌套类中实现包围它的接口:

public interface ClassInterface {void howdy();class Test implements ClassInterface {@Overridepublic void howdy() {System.out.println("在嵌套类内部实现了外围接口的方法");}}public static void main(String[] args) {new Test().howdy();}
}

        程序执行的结果是:

        当需要创建一个接口的所有不同实现的公用代码时,一个嵌套在接口中的类会很有用。

    有时,为了测试一个独立的类,会用到一个单独的main()。这种main()就可以被放入到嵌套类中,在交付产品时将其删去即可。


从多嵌套的内部类中访问外部人员

        一个类被嵌套了多少层都不重要,因为它可以透明地访问包含它的所有类的所有成员:

class MNA {private void f() {}class A {private void g() {}public class B {void h() {g();f();}}}
}public class MultiNestingAcess {public static void main(String[] args) {MNA mna = new MNA();MNA.A mnaa = mna.new A();MNA.A.B mnaab = mnaa.new B();mnaab.h();}
}

        不需要在调用构造器时限定类的名字,因为.new语法会寻找到正确的作用域。

相关文章:

初识Java 9-1 内部类

目录 创建内部类 到外部类的链接 使用.this和.new 内部类和向上转型 在方法和作用域中的内部类 匿名内部类 嵌套类 接口中的类 从多嵌套的内部类中访问外部人员 本笔记参考自&#xff1a; 《On Java 中文版》 定义在另一个类中的类称为内部类。利用内部类&#xff0c;…...

合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)

屏幕横屏竖屏切换(Rotation) lvgl.disp_set_rotation(nil, lvgl.DISP_ROT_angle) 屏幕横屏竖屏切换显示&#xff0c;core版本号要>3202参数 参数类型释义取值nil无意义nilangle显示角度0,90,270,360 返回值nil 例子 lvgl.init()- -初始化 lvgl.disp_set_rotation(nil,…...

在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例

在Unity中&#xff0c;Instantiate函数用于在场景中创建一个新的游戏对象实例。它的语法如下所示&#xff1a; public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); original&#xff1a;要实例化的原始游戏对象。position&#xff1…...

解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./

问题描述 我们在初次使用tesserocr库的时候&#xff0c;可能会报以下错误&#xff1a; RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 这是因为我们在使用 conda 创建的环境中找不到"tessdata"这个文件夹。 解决办法 这时候把Tessera…...

使用Python CV2融合人脸到新图片--优化版

优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重&#xff0c;于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下&#xff1a; import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…...

Python分享之对象的属性

Python一切皆对象(object)&#xff0c;每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对象的属性可能来自于其类定义&#xff0c;叫做类属性(class attribute)。类属性可能来自类定义自身&#xff0c;也可能根据类定义继承来的…...

编程参考 - std::exchange和std::swap的区别

这两个功能是C standard library中的Standard template library中的一部分。容易混淆&#xff0c;我们来看下它们的区别。 exchange&#xff1a; 这个函数是一个返回原先值的set函数。 std::exchange is a setter returning the old value. int z std::exchange(x, y); Af…...

Sentinel整合RestTemplate

resttemplate开启sentinel保护配置resttemplate.sentinel.enabledtrue配置sentinel-dashboard地址spring.cloud.sentinel.transport.dashboardlocalhost:8858\ spring.cloud.sentinel.transport.dashboard.port8739 实例化RestTemplate并加入SentinelRestTemplate注解Configura…...

微前端学习(下)

一、课程目标 qiankun 整体运行流程微前端实现方案二、课程大纲 qiankun 整体流程微前端方案实现DIY微前端核心能力1、微前端方案实现 基于 iframe 完全隔离的方案、使用纯的Web Components构建应用EMP基于webpack module federationqiankun、icestark 自己实现JS以及样式隔离2…...

Android Splash实现

1、创建Activity package com.wsy.knowledge.ui.splashimport android.animation.Animator import android.animation.AnimatorListenerAdapter import android.annotation.SuppressLint import android.os.Build import android.os.Looper import android.util.Log import an…...

FPGA projet : VGA

在vga屏幕上显示 &#xff1a; 野火科技 相比于上个工程&#xff0c;只需要修改 vga_pix 模块即可。 注意存储器类型变量的定义&#xff1a;reg 【宽度】<名称>【深度】 赋值 always &#xff08;poseedge vga_clk&#xff09;begin 为每一行赋值&#xff0c;不可位赋…...

JDK8 升级至JDK19

优质博文IT-BLOG-CN 目前部分项目使用JDK8&#xff0c;部分项目使用JDK19因此&#xff0c;环境变量中还是保持JDK8&#xff0c;只需要下载JDK19免安装版本&#xff0c;通过配置IDEA就可以完成本地开发。 一、IDEA 环境设置 【1】通过快捷键CTRL SHIFT ALT S或者File->P…...

Python3.10 IDLE更换主题

前言 自定义主题网上有很多&#xff0c;3.10IDLE的UI有一些新的东西&#xff0c;直接扣过来会有些地方覆盖不到&#xff0c;需要自己测试着添几行配置&#xff0c;以下做个记录。 配置文件路径 Python安装目录下的Lib\idlelib\config-highlight.def。如果是默认安装&#xf…...

C# OpenVino Yolov8 Pose 姿态识别

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…...

北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一&#xff1a;Verilog代码没有跑通 报…...

CSS - 鼠标移入整行高亮显示,适用于会员套餐各参数对比页面(display: table,div 转表格形式)

效果图 可根据基础示例和进阶示例&#xff0c;复制进行改造样式。 如下图所示&#xff0c;本文提供 2 个示例。 基础示例 找个 HTML 页面&#xff0c;一键复制运行。 <body><h1 style"text-align: center;">基础示例</h1><section class"…...

无涯教程-JavaScript - ATAN2函数

描述 The ATAN2 function returns the arctangent, or inverse tangent, of the specified x- and ycoordinates, in radians, between -π/2 and π/2. 语法 ATAN2 (x_num, y_num)争论 Argument描述Required/OptionalX_numThe x-coordinate of the point.RequiredY_numThe…...

Tomcat 下部署 jFinal

1、检查web.xml 配置&#xff0c;在 tomcat 下部署需要检查 web.xml 是否存在&#xff0c;并且要确保配置正确&#xff0c;配置格式如下。 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…...

【Spatial-Temporal Action Localization(二)】论文阅读2017年

文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架思考不足之处 2.…...

二维码智慧门牌管理系统:数据现势性,满足应用需求的根本保证

文章目录 前言一、项目背景二、数据的现势性三、系统的优势四、应用前景 前言 在当今信息化社会&#xff0c;数据的重要性日益凸显&#xff0c;尤其是数据的现势性&#xff0c;它决定着服务的质量和满足应用需求的能力。近日&#xff0c;一个创新的二维码智慧门牌管理系统项目…...

BF算法(C++)简单讲解

BF算法匹配过程易理解&#xff0c;若匹配&#xff0c;子串和主串都往下移一位。不匹配时&#xff0c;主串回溯至本次匹配开始下标的下一位。例&#xff1a;图中第三趟匹配时&#xff0c;主串到第七位时与子串不匹配&#xff0c;这次匹配主串是从第三位开始的&#xff0c;所以下…...

JVM 虚拟机 ----> Java 类加载机制

文章目录 JVM 虚拟机 ----> Java 类加载机制一、概述二、类的生命周期1、类加载过程&#xff08;Loading&#xff09;&#xff08;1&#xff09;加载&#xff08;2&#xff09;验证&#xff08;3&#xff09;准备&#xff08;4&#xff09;解析&#xff08;5&#xff09;初始…...

《protobuf》基础语法2

文章目录 枚举类型ANY 类型oneof 类型map 类型改进通讯录实例 枚举类型 protobuf里有枚举类型&#xff0c;定义如下 enum PhoneType {string home_addr 0;string work_addr 1; }同message一样&#xff0c;可分为 嵌套定义&#xff0c;文件内定义&#xff0c;文件外定义。不…...

利用 SOAR 加快事件响应并加强网络安全

随着攻击面的扩大和攻击变得越来越复杂&#xff0c;与网络攻击者的斗争重担落在了安全运营中心 &#xff08;SOC&#xff09; 身上。SOC 可以通过利用安全编排、自动化和响应 &#xff08;SOAR&#xff09; 平台来加强组织的安全态势。这一系列兼容的以安全为中心的软件可加快事…...

uni-app:通过ECharts实现数据可视化-如何引入项目

效果 引入文件位置 代码 <template><view id"myChart"></view> </template> <script> import echarts from /static/js/echarts.js // 引入文件 export default {mounted() {// 初始化EChartsconst myChart echarts.init(document…...

string 模拟与用法

string 用法 string string 模拟 #pragma once #include <assert.h> #include <string.h> #include <iostream>namespace sjy {class string{public://迭代器相关typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _st…...

[NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤

一 数据集 【Awesome-Chinese-LLM中文数据集】 【awesome-instruction-dataset】【awesome-instruction-datasets】【LLaMA-Efficient-Tuning-数据集】Wiki中文百科&#xff08;25w词条&#xff09;wikipedia-cn-20230720-filteredBaiduBaiKe&#xff08;563w词条&#xff09; …...

华为云云耀云服务器L实例使用教学 | 利用华为云服务器搭建--> 基于Spring Boot+WebSocket+WebRtc实现的多人自习室

文章目录 1. 购买华为云服务器L2. 在华为云服务器上搭建项目前期准备工作1. 更换登录密码2. 安全组配置 3. 在服务器上运行自己的项目 1. 购买华为云服务器L 在有优惠券的情况下&#xff0c;来到华为云这个网址下面&#xff0c;链接为&#xff1a;https://www.huaweicloud.com…...

Postman应用——接口请求(Get和Post请求)

文章目录 新增请求接口请求Get接口请求Post 这里只讲用的比较多的Get和Post请求方式&#xff0c;也可以遵循restful api接口规范&#xff0c;使用其他请求方式。 GET&#xff08;SELECT&#xff09;&#xff1a;从服务器取出资源&#xff08;一项或多项&#xff09;POST&#…...

k8s pod概念、分类及策略

目录 一.pod相关概念 &#xff12;.Kubrenetes集群中Pod两种使用方式 &#xff13;.pause容器的Pod中的所有容器共享的资源 &#xff14;.kubernetes中的pause容器主要为每个容器提供功能&#xff1a; &#xff16;.Pod分为两类&#xff1a; 二.Pod容器的分类 1.基础容器…...

网站云服务器租用/互联网营销方式

动态规划 暴力递归之所以暴力是因为存在大量的重复计算&#xff0c;比如一个很经典的问题——斐波那契数列。 public static int fibonacci(int n) {if(n1) {return 1;}if(n2) {return 1;}return fibonacci(n-1)fibonacci(n-2);}上面的试法&#xff0c;存在大量的重复计算&am…...

工程公司工作总结/seo排名怎么优化软件

程序员不是写代码的么&#xff0c;为什么需要画图&#xff1f;很多程序员会认为写好代码就好&#xff0c;画好图有什么用&#xff1f;程序员成为架构师后是不是就天天画架构图&#xff0c;成为了所谓的 PPT 架构师&#xff1f;如上这些疑问&#xff0c;好几年前也曾让我困惑过。…...

数学网站怎么做的/济南网站建设

好久之前做的题了QWQ 现在来补一发博客 一道神仙题啊。。qwq 首先&#xff0c;我们可以看出来&#xff0c;我们如果对于每个点维护一个\(val\)&#xff0c;表示他的直系儿子中有几个表现为1的。 那么\(val[x]>>1\) 就是他反应的类型 这样十分便于我们计算一开始的\(val\)…...

wordpress+迁移后空白/百度网页版

JSP和SERVLET区别 JSP和SERVLET到底在应用上有什么区别&#xff0c;很多人搞不清楚。我来胡扯几句吧。简单的说&#xff0c;SUN首先发展出SERVLET&#xff0c;其功能比较强劲&#xff0c;体系设计也很先进&#xff0c;只是&#xff0c;…...

网站域名如何从代理商那里转出来/旺道seo优化

什么是统计机器学习/统计学习/机器学习&#xff1f; 三个词指的都是同一概念&#xff0c;这里统一简称为机器学习&#xff0c;指的是计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 实现机器学习的步骤是什么&#xff1f; 得到有限的训练数据集…...

网站开发方案书/国际大新闻最新消息

1.管中窥豹之通过源码了解openGauss多线程架构-8月18日20:00本讲座主要介绍openGauss的多线程架构&#xff0c;通过源码了解线程间通信机制、线程池的原理和优势、如何开启线程池等&#xff0c;力图通过多线程架构这一点&#xff0c;管中窥豹&#xff0c;初步了解openGauss如何…...