初识Arkts
创建对象:
类:
类声明引入一个新类型,并定义其字段、方法和构造函数。 定义类后,可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中,定义了Person类,该类具有字段name和surname、构造函数和方法fullName。
export class Person{// 属性 必须要给初始值firstName:string=''lastName:string=''
// 构造函数:给属性初始值,初始化属性
// constructor() {
// console.log('无参函数')
// }constructor( firstName:string,lastName:string) {this.firstName=firstNamethis.lastName=lastName}fullName(){return this.lastName+this.firstName}
}
let pp:Person=new Person('z','s')
//实例字段,通过new对象之后进行访问的字段
pp.firstName='啧啧啧';
字段
字段是直接在类中声明的某种类型的变量。 类可以具有实例字段或者静态字段。 实例字段 实例字段存在于类的每个实例上。每个实例都有自己的实例字段集合。 要访问实例字段,需要使用类的实例。
class Person2{firstName:string=''lastName:string=''//不能有构造函数/函数
}
//字面量创建对象
let p:Person2={ firstName: '三', lastName: '张'}export class Person3{//静态字段static firstName:string=''lastName:string=''
静态字段
使用关键字static将字段声明为静态。静态字段属于类本身,类的所有实例共享一个静态字段。 要访问静态字段,需要使用类名.
//静态函数static a(num1:number,num2:number){Person3.firstName='张三'//不支持this无法直接访问非静态字段/函数//this.lastName='aa'// a2();return num1+num2}
}
//静态字段使用类名进行访问
Person3.firstName='ss'
方法属于类。类可以定义实例方法或者静态方法。静态方法属于类本身,只能访问静态字段。而实例方法既可以访问静态字段,也可以访问实例字段,包括类的私有字段。
继承
一个类可以继承另一个类(称为基类),并使用以下语法实现多个接口 继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。 基类也称为“父类”或“超类”。继承类也称为“派生类”或“子类”。 包含implements子句的类必须 实现列出的接口中定义的所有方法, 但使用默认实现定义的方法除外.
class Pet{name:string=''sex:string=''static age:number=0constructor(name:string,sex:string) {this.name=namethis.sex=sex}show(){return`昵称 :${this.name},性别:${this.sex}`}
}
//子类 只支持单继承
class Dog extends Pet{//必须调用父类的有参的构造函数constructor(name:string,sex:string) {//super调用父类的构造函数super(name,sex)}type:string=''//重写:子类重写父类的函数//1.方法名相同2.参数类型相同3.返回值类型相同,或是其子类show(){// return`昵称 :${this.name},性别:${this.sex},品种:${this.type}`return super.show()+'品种:'+this.type}a(){this.show()//子类super.show()//父类}
父类访问
关键字super可用于访问父类的实例字段、实例方法和构造函数。在实现子类功能时,可以通过该关键字从父类中获取所需接口
//子类 只支持单继承
class Dog extends Pet{//必须调用父类的有参的构造函数constructor(name:string,sex:string) {//super调用父类的构造函数super(name,sex)}type:string=''//重写:子类重写父类的函数//1.方法名相同2.参数类型相同3.返回值类型相同,或是其子类show(){// return`昵称 :${this.name},性别:${this.sex},品种:${this.type}`return super.show()+'品种:'+this.type}a(){this.show()//子类super.show()//父类}
方法重写与重载
子类可以重写其父类中定义的方法的实现。重写的方法必须具有与原始方法相同的参数类型和相同或派生的返回类型。 通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后,如果两个重载签名的名称和参数列表均相同,则为错误.
//重载:1.同一个类,方法名相同,参数列表不同,返回值类型相同// shows(a:number){// }// shows(){//// }
}
let pe=new Pet('zs','公')
//子类函数和父类重名,会调用子类函数
pe.show()class Over{//重载aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
class Oo extends Over{aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
构造函数重载签名 我们可以通过编写重载签名,指定构造函数的不同调用方式。具体方法为,为同一个构造函数写入多个同名但签名不同的构造函数头,构造函数实现紧随其后。
如果两个重载签名的名称和参数列表均相同,则为错误。
//重载aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
class Oo extends Over{aa(x:number):voidaa(x:string):voidaa(x:number|string):void{}
}
可见性修饰符
类的方法和属性都可以使用可见性修饰符。 Public(公有) public修饰的类成员(字段、方法、构造函数)在程序的任何可访问该类的地方都是可见的。 Private(私有) private修饰的成员不能在声明该成员的类之外访问 Protected(受保护) protected修饰符的作用与private修饰符非常相似,不同点是protected修饰的成员允许在派生类中访问 getter和setter setter和getter可用于提供对对象属性的受控访问
class Aa{//共有的public a1:string=''//受保护的:本类和子类中使用protected a2:string=''//私有的private a3:string=''
}
class Bb extends Aa{show(){this.a2='asd'// this.a3='ss'}
}
let aa=new Aa();
let bb=new Bb()class pri{private _a1: stringpublic set a1(value: string) {this._a1 = value}public get a1(): string {return this._a1}private _a2: stringpublic set a2(value: string) {this._a2 = value}public get a2(): string {return this._a2}constructor(a1: string, a2: string) {this._a1 = a1this._a2 = a2}}
let p1=new pri('1','2');
p1.a1='a'
Record类型的对象字面量 泛型Record<K, V>用于将类型(键类型)的属性映射到另一个类型(值类型)。常用对象字面量来初始化该类型的值类型K可以是字符串类型或数值类型,而V可以是任何类型
//map键值对 <key,value>泛型
let map:Record<string,string>={'name':'张三','sex':'男','color':'黄'
}
let names=map['name'];
class Stu{name:string=''age:number=0
}
let map2:Record<string,Stu>={'张三':{name:'张三',age:18},'张2':{name:'张2',age:18},'张4':{name:'张4',age:18},'张5':{name:'张5',age:18},'张6':{name:'张6',age:18},
}
let S:Stu=map2['张三'];
接口
接口声明引入新类型。接口是定义代码协定的常见方式。 任何一个类的实例只要实现了特定接口,就可以通过该接口实现多态。 接口通常包含属性和方法的声明
interface Stus{//接口中的方法,没有方法体(方法的实现)eat():voidstudy():number
}
//(实现类)实现接口,必须重写接口中的方法
class Stu1 implements Stus{eat(): void {console.log('学生在吃')}study(): number {console.log('学生在学习')return 100}}
接口属性 接口属性可以是字段、getter、setter或getter和setter组合的形式。 属性字段只是getter/setter对的便捷写法实现接口的类也可以使用以下两种方式
interface Stu2{//接口的属性会在实现类中默认隐式生成getter/setter方法name:stringsex:stringeat():voidstudy():number
}
class Stu3 implements Stu2{name: string=''sex: string=''eat(): void {throw new Error('Method not implemented.')}study(): number {throw new Error('Method not implemented.')}}
let stu3=new Stu3();
stu3.name='123'interface Inte1{a():void
}
interface Inte2 extends Inte1{b():void
}
class Imp1 implements Inte2{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
interface A1{a():void
}
interface B1{b():void
}
//实现多个接口
class C1 implements A1,B1{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
接口继承 接口可以继承其他接口,如下面的示例所示继承接口包含被继承接口的所有属性和方法,还可以添加自己的属性和方法。 继承关键字extends
interface Inte1{a():void
}
interface Inte2 extends Inte1{b():void
}
class Imp1 implements Inte2{b(): void {throw new Error('Method not implemented.')}a(): void {throw new Error('Method not implemented.')}}
泛型
泛型类型和函数 泛型类型和函数允许创建的代码在各种类型上运行,而不仅支持单一类型。 泛型类和接口 类和接口可以定义为泛型,将参数添加到类型定义中,如以下示例中的类型参数Element:
class Pet{name:string=''play():void{console.log('玩耍')}
}
class Dog extends Pet{play():void{console.log('狗踢皮球')}
}
class Cat extends Pet{play():void{console.log('猫玩狗')}
}
//1.以父类作为形参
//和宠物玩耍
// function play(cat:Cat){
// Cat.play()
// }
// play(new Cat())
function play(pet:Pet){pet.play()
}
play(new Cat())
play(new Dog())
//2,以父类作为返回值
function ly():Pet{let num=Math.random()*10if(num>5){return new Dog()}else {return new Cat()}
}
通配符
泛型中通配符 我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢? 常用的 T,E,K,V,? 本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的: ?表示不确定的 类型 T (type) 表示具体的一个类 K V (key value) 分别代表键值中的Key Value E (element) 代表Element ?无界通配符
class Fx<E>{a(e:E):void{console.log(`${e}`)}
}
let fx=new Fx<number[]>();
fx.a([1,2])
//返回数组的最后一个元素
function lastGet(x:number[]):number{return x[x.length]
}
let aa=lastGet([1,2,3,4])
//返回任意类型数组的最后一个元素
function getlast<T>(x:T[]):T{return x[x.length-1]
}
let a2=getlast<String>(['1','2','as'])
相关文章:
初识Arkts
创建对象: 类: 类声明引入一个新类型,并定义其字段、方法和构造函数。 定义类后,可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中,定义了Person类,该类具有字段name和surname、构造函…...

基本的SELECT语句
1.SQL概述 SQL(Structured Query Language)是一种用于管理和操作关系数据库的编程语言。它是一种标准化的语言,用于执行各种数据库操作,包括创建、查询、插入、更新和删除数据等。 SQL语言具有简单、易学、高效的特点,…...

51c自动驾驶~合集30
我自己的原文哦~ https://blog.51cto.com/whaosoft/12086789 #跨越微小陷阱,行动更加稳健 目前四足机器人的全球市场上,市场份额最大的是哪个国家的企业?A.美国 B.中国 C.其他 波士顿动力四足机器人 云深处 绝影X30 四足机器人 …...
Python Tutor网站调试利器
概述 本文主要是推荐一个网站:Python Tutor. 网站首页写道: Online Compiler, Visual Debugger, and AI Tutor for Python, Java, C, C++, and JavaScript Python Tutor helps you do programming homework assignments in Python, Java, C, C++, and JavaScript. It contai…...
h5小游戏实现获取本机图片
h5小游戏实现获取本机图片 本文使用cocos引擎 1.1 需求 用户通过文件选择框选择图片。将图片内容转换为Cocos Creator的纹理 (cc.Texture2D),将纹理设置到 cc.SpriteFrame 并显示到节点中。 1.2 实现步骤 创建文件输入框用于获取文件 let input document.createElement(&quo…...
前端 javascript a++和++a的区别
前端 javascript a和a的区别 a 是先执行表达式后再自增,执行表达式时使用的是a的原值。a是先自增再执行表达示,执行表达式时使用的是自增后的a。 var a0 console.log(a); // 输出0 console.log(a); // 输出1var a0 console.log(a); // 输出1 console.l…...

OceanBase V4.x应用实践:如何排查表被锁问题
DBA在日常工作中常常会面临以下两种常见情况: 业务人员会提出问题:“表被锁了,导致业务受阻,请帮忙解决。” 业务人员还会反馈:“某个程序通常几秒内就能执行完毕,但现在却运行了好几分钟,不清楚…...

ctfshow-web入门-SSRF(web351-web360)
目录 1、web351 2、web352 3、web353 4、web354 5、web355 6、web356 7、web357 8、web358 9、web359 10、web360 1、web351 看到 curl_exec 函数,很典型的 SSRF 尝试使用 file 协议读文件: urlfile:///etc/passwd 成功读取到 /etc/passwd 同…...
【日常记录-Git】如何为post-checkout脚本传递参数
1. 简介 在Git中,post-checkout 钩子是一个在git checkout 或git switch命令成功执行后自动调用的脚本。该脚本不接受任何来自Git命令的直接参数,因为Git设计该钩子是为了在特定的版本控制操作后执行一些预定义的任务,而不是作为一个通用的脚…...

《机器人控制器设计与编程》考试试卷**********大学2024~2025学年第(1)学期
消除误解,课程资料逐步公开。 复习资料: Arduino-ESP32机器人控制器设计练习题汇总_arduino编程语言 题-CSDN博客 试卷样卷: 开卷考试,时间: 2024年11月16日 001 002 003 004 005 ……………………装………………………...

后台管理系统(开箱即用)
很久没有更新博客了,给大家带上一波福利吧,大佬勿扰 现在市面上流行的后台管理模板很多,若依,芋道等,可是这些框架对我们来说可能会有点重,所以我自己从0到1写了一个后台管理模板,你们使用时候可扩展性也会更高 项目主要功能: 成员管理,部门管理&#…...

5G CPE与4G CPE的主要区别有哪些
什么是CPE? CPE是Customer Premise Equipment(客户前置设备)的缩写,也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备,用于连接用户…...
量化交易系统开发-实时行情自动化交易-4.1.3.A股平均趋向指数(ADX)实现
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说A股平均趋向指数实现。 …...
tcp的网络惊群问题
1. SO_REUSEPORT 可以解决epoll的惊群问题 但是,现在的 TCP Server,一般都是 多进程多路IO复用(epoll) 的并发模型,比如我们常用的 nginx 。如果使用 epoll 去监听 accept socket fd 的读事件,当有新连接建立时,所有进…...

云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测
背景 如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当…...

软考教材重点内容 信息安全工程师 第 4 章 网络安全体系与网络安全模型
4,1 网络安全体系的主要特征: (1)整体性。网络安全体系从全局、长远的角度实现安全保障,网络安全单元按照一定的规则,相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护方式。 (2)协同性。网络安全体系依赖于多种安全机制,通过各…...

机器学习——期末复习 重点题归纳
第一题 问题描述 现有如下数据样本: 编号色泽敲声甜度好瓜1乌黑浊响高是2浅白沉闷低否3青绿清脆中是4浅白浊响低否 (1)根据上表,给出属于对应假设空间的3个不同假设。若某种算法的归纳偏好为“适应情形尽可能少”,…...
MYSQL——数据更新
一、插入数据 1.插入完整的数据记录 在MYSQL中,使用SQL语句INSERT插入一条完整的记录,语法如下: INSERT INTO 表名 [(字段名1[,...字段名n])] VALUES (值1[...,值n]); 表名——用于指定要插入的数据的表名 字段名——用于指定需要插入数据…...
Vite 基础理解及应用
文章目录 概要Vite基础知识点1. 快速启动和热更新热更新原理 2. 基于ES模块的构建3. 对不同前端框架的支持 vite.config.js配置实例1. 基本结构2. 服务器相关配置3. 输入输出路径配置4. 打包优化配置 项目构建一、项目初始化二、项目结构理解三、CSS处理四、静态资源处理五、构…...

[JAVA]用MyBatis框架实现一个简单的数据查询操作
基于在前面几章我们已经学习了对MyBatis进行环境配置,并利用SqlSessionFactory核心接口生成了sqlSession对象对数据库进行交互,执行增删改查操作。这里我们就先来学习如何对数据进行查询的操作,具体查询操作有以下几个步骤 创建实体类创建Ma…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...