构造函数

Android Audio:AudioTrack构造函数分析

半腔热情 提交于 2020-01-26 02:07:18
分析AudioTrack之前先分析一下AudioTrack和MediaPlayer的区别: AudioTrack 只能播放 pcm 原始数据,不能播放视频。 MediaPlayer 可以播放视频和音频。 AudioTrack 只支持 pcm 原始音频数据。 MediaPlayer 支持 mp3,wav,aac… MediaPlayer 在底层会创建指定的格式的解码器,将音频数据转化为 pcm 然后再交给 pcm 去播放。MediaPlayer底层会创建 AudioTrack,将解码后的数据交给 AudioTrack 播放。 每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到 AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中进行播放,目前Android同时最多可以创建32个音频流,也就是说,Mixer最多会同时处理32个AudioTrack的数据流。 个人感觉AudioTrack梳理起来的过程是非常痛苦的,中间可能也有很多问题,参考了很多博客,还有实习师傅的指导,整理一篇Android P的AudioTrack流程初文出来,以后工作用的多了熟悉了,再修改。 AudioTrack的构造函数分析: android\frameworks\base

java知识点

两盒软妹~` 提交于 2020-01-26 01:52:46
Java开发环境搭建 JDK(无脑) 配置环境变量 JAVA_HOME(新建) C:\Program Files\Java\jdk1.7.0_67 Path(追加) %JAVA_HOME%/bin;… CLASSPATH .;./bin 本地类加载–>系统类加载—–>扩展类加载 HelloWorld编写运行 顶级三要素 package import 不需要导包情况 1)需要的类和当前类在同一个包下 2)需要的类位于java.lang下 class 编译 I:\ssh\day01 javac -d ./bin src/HelloWorld.java -d 目录 将编译好的字节码文件放到指定目录 运行 I:\ssh\day01 java [参数] 完整类名(包名+类名) -classpath 路径 -cp 路径 指定类加载路径(CLASSPATH) java -cp ./bin com.briup.day01.HelloWorld 打包 I:\ssh\day01\bin jar 部署运行 hello.jar java -cp hello.jar com.briup.day01.HelloWorld 扩展类加载库 C:\Program Files\Java\jdk1.7.0_67\jre\lib\ext java com.briup.day01.HelloWorld Java中重要的包

Java Script class定义类和对象

安稳与你 提交于 2020-01-26 00:55:07
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script type="text/javascript"> class Cat{ //constructor是一种用于创建和初始化class创建的对象的特殊方法(构造函数) constructor(){ this.name="猫" this.age=18 //sound方法每实例化一次对象就会创建一次,会占用较多内存空间,最好不要写在构造函数里 this.sound=function(){ console.log("会叫哦") } } //写在构造函数外,就不会每次实例化都会创建一次,节约空间,在原型中可以找到 run(){ console.log("会跑哦") } } var cat1=new Cat() console.log(cat1) </script> </body> </html> 来源: https://www.cnblogs.com/a155-/p/12233646.html

数据的封装和隐藏原则

回眸只為那壹抹淺笑 提交于 2020-01-26 00:10:00
这是我第一篇文章,总结了网上牛人的经验,以及我在实践中的思考,记录总结,以便日后回顾。 1.尽量降低耦合 1.1.原理:   Martin Fowler写到“任何 全局数据 通常都是有问题的,除非可以证明它确实没有问题”。多种原因 导致Java中的全局变量和其他类似的全局结构被认为是一种糟糕的做法。 全局数据的本质和含义违背了数据的封装和隐藏原则。 理想的情况下, 一个对象应该仅仅与那些通过构造函数或方法调用传入的对象交互 。 一个对像的实现应当对它的使用者完全隐藏实现细节。(封装隐藏) 所有使用到了这个 全局数据 的functions都会受到影响,于是所有的这些代码都要被检测、修改、重新测试, 而且,修改所有使用了这个变量的function影响到的其它地方,就这样, 一个变量值的改变影响了一个方法,又造成另一个方法的错误。在程序中,这样问题实在是可怕。 OO系统的一个基本原则是一个Object不应暴露它的实现细节,这样,当你改变了实现细节, 就可以不用改变使用了该对像的的代码部份 。所以,你应当避免getter 和 setter 函数, 因为它们主要用来访问实现细节。 1.2.实践: 尽可能地减少可变状态。特别是在并发程序中。总之,尽可能地减少可变状态。 1.2.1.减少 全局数据的使用;而对于一个对象而言,尽量减少成员变量的使用。 1.2.2.尽可能少地暴露对象自已的状态

js类(继承)(二)

时光毁灭记忆、已成空白 提交于 2020-01-25 20:03:13
1. 定义js类 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 代码如下: function ShapeBase() { this.show = function() { alert("ShapeBase show"); }; this.init = function(){ alert("ShapeBase init"); }; } 这个类里定义了两个方法:show和init, 需要注意的是这里用到了this来声明, 而不是var, 因为用var是用来定义私有方法的. 另外, 我们还可以用prototype属性来定义Shape的方法. 代码如下: ShapeBase.prototype={ show:function() { alert("ShapeBase show"); }, init:function() { alert("ShapeBase init"); } }; 现在, 类是写好了, 让我们写个js来测试下, 看看结果是不是跟我们想象的一样呢? 代码如下: function test(src){ var s=new ShapeBase(); s.init(); s.show(); } 看到了吧, 其调用方式和C#一模一样,

Java Date的概述和构造方法

ⅰ亾dé卋堺 提交于 2020-01-25 16:50:58
Date类 java.util 包提供了 Date类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象,其他的已经过时 1、构造方法 第一个构造函数使用当前日期和时间来初始化对象。 Date( ) 第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒数。 Date(long millisec) 测试代码如下: package cn.wen; import java.util.Date; public class DateDemo { public static void main(String[] args) { // 创建对象 Date d = new Date(); System.out.println("d:" + d); //d:Sun Jan 05 14:47:29 CST 2020 // 创建对象 //long time = System.currentTimeMillis(); //d2:Thu Jan 01 09:00:00 CST 1970 long time = 1000 * 60 * 60; // 1小时 Date d2 = new Date(time); System.out.println("d2:" + d2); //d2:Thu Jan 01 09:00:00 CST 1970(时差为8小时) } } 2

chapter3 异常

耗尽温柔 提交于 2020-01-25 16:20:27
大纲: 1、普通函数异常发生,防止局部资源泄漏 2、构造函数异常发生,防止局部资源泄漏 3、禁止析构函数发生的异常传递到调用者 4、抛出异常、传递参数、调用虚函数差别 5、比较异常传递方式 6、慎用异常规格 1、普通函数异常发生,防止局部资源泄漏 异常处理机制: 没有任何的异常捕获机制,将导致程序的控制权到调用者上,原有程序逻辑将不会被执行。相反,如果有异常捕获机制,我们就可以控制程序的执行逻辑。 局部资源,这里指代指针所指向堆资源。 解决方法: 用对象代替指针,对象的析构函数内释放资源。当函数返回时(正常/异常),函数体内的局部对象确保会调用其析构函数来释放资源。 标准类库中auto_ptr<T>可用来支持上述阐述: 构造函数内,使指针指向堆对象 析构函数内,释放堆对象及其占用空间 借鉴auto_ptr<T>的实现方法,对于任何资源,我们将其关联到一个对象上,析构函数内实现资源的释放。 2、构造函数异常发生,防止局部资源泄漏 构造函数内何时发生异常? 在构造函数内尝试分配内存并初始化对象,内存不够,将引发异常,此时程序的控制权将转至调用构造函数的地方。构造函数没有完全被执行, C++对于不完整的对象,在离开其生存空间时,将不会执行对象的析构函数,资源泄漏发生了。 解决方法: 在构造函数内部捕获到异常,释放资源,在向上传递异常。而不是直接将异常向上传递,一旦向上传递

【C++】构造函数和this指针

只愿长相守 提交于 2020-01-25 10:28:49
通常this指针在对象构造完毕后才完全生成,而在构造函数执行过程中,对象还没有完全生成,所以this指针也是没有完全生成的,在构造函数中使用this指针会存在问题,应该尽量避免。 构造函数中可以访问对象中已经初始化的成员(成员初始化是有顺序的),但尽量不要调用对象方法,因为调用方法的时候会隐含使用this指针。 在某些应用中会存在这样的对象,他的成员变量需要用对象的this指针进行初始化: class A { B b; }; class B { A* a; }; A类的构造函数可以写成: A(): b(this) 这样会违反构造函数中尽量不使用this指针的规范,一种替代的方法是,在A类中增加Init方法,在此方法中设置B的成员变量值为A对象的this指针,Init方法在A对象构造完后调用,从而this指针是完整的: class A { B b; A() { } void Init() { b.SetMemberA(this); } }; class B { A* a; void SetMemberA(A* pa) { a = pa; } }; 来源: CSDN 作者: 摩羯座程序员 链接: https://blog.csdn.net/qq_43248127/article/details/103772795

C++之构造函数、参数列表、析构函数

主宰稳场 提交于 2020-01-25 09:13:25
参考自:https://blog.csdn.net/sunSHINEEzy/article/details/78122485 构造函数之默认构造函数(调用的构造函数不用传递参数) 两种实例化方式都是默认构造函数 构造函数之初始化列表 红字部分即为初始化列表:一个引号,多个参数用逗号隔开,赋值用() 初始化列表特性: 其先于构造函数执行 其只能用于构造函数 其可以同时初始化多个数据成员 【注意】初始化列表的功用:对于类中的静态常量,不能用构造函数来初始化,必须使用初始化列表的方式 拷贝构造函数 拷贝构造函数的特点: 当用户没有定义构造函数时,编译器会自动生成一个默认的拷贝构造函数(构造函数也是如此) 当采用直接初始化或复制初始化实例化对象时,系统会自动调用拷贝构造函数 由于拷贝构造函数的特性,拷贝构造函数不能重载!! 【总结】构造函数总结: 【总结】所有参数带有默认值时,转变成了默认构造函数 【注意】初始化列表是所有构造函数都可以实现的. 析构函数(用于释放系统资源的函数) 定义格式: 析构函数特点: 如果没有自定义的析构函数,则系统自动生成 析构函数在对象销毁时自动调用(与之相对应,构造函数在对象实例化时自动调用) 析构函数没有返回值(构造函数也是如此)、没有参数也不能重载 不允许在()内加任何的参数 【重要知识点】对象的生命历程 【总结】成员函数的分类 成员函数的参数修饰方式

javescript 的 对象

本小妞迷上赌 提交于 2020-01-25 05:41:11
一,定义: 对象是JavaScript的一个基本数据类型,是一种复合值,它将很多值(原始值或者其他对象)聚合在一起,可通过名字(name/作为属性名)访问这些值。即属性的无序集合。 关键是name属性名可以是什么类型,以下是一些测试(不完整): 二,创建对象的方法 1.在{}内直接创建键值对,如上测试示例 2.使用实例化类的方法:new + Object() let car = new Object(); //实际上,car.type的写法最终在后台自动转为car['type']执行的 car.type = 'Honda'; //等同于car['type'] = 'Honda' car.color = 'white'; //等同于 car['color'] = 'white' cat.seat = 5; //等同于 cat['seat'] = 5car.sayColor = function(){alert(this.color)} 由于1,2两种方法在使用同一接口创建多个对象时,会产生大量的重复代码,为此,有了工厂模式 3.工厂模式--函数返回的形式 function creaeCar(type,color,seat){ let obj = new Object(); obj.type = type; obj.color = color; obj.seat = seat; obj