首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

Hadoop概念学习系列之Hadoop Streaming(二十三)

Streaming的原理: 是用Java实现一个包装用户程序的MapReduce程序,该程序负责调用MapReduce Java接口获取key/value对输入,创建一个新的进程启动包装的用户程序,将数据通过管道传递给包装的用户程序处理,然后调用MapReduce Java接口将用户程序的输出切分成key/value对输出。 Streaming优点: 1)开发效率高,便于移植只要按照标准输入输出格式进行编程,就可以满足hadoop要求。因此单机程序稍加改动就可以在集群上进行使用。 同样便于测试只要按照 cat input | mapper | sort | reducer > output 进行单机测试即可。 如果单机测试通过,大多数情况是可以在集群上成功运行的,只要控制好内存就好了。 2)提高程序效率。有些程序对内存要求较高,如果用java控制内存毕竟不如C/C++。 Streaming不足: 1)Hadoop Streaming默认只能处理文本数据,无法直接对二进制数据进行处理 2)Streaming中的mapper和reducer默认只能向标准输出写数据,不能方便地处理多路输出。 Streaming编程接口参数 Streaming编程接口默认有很多参数,这些参数的作用其实和我们用Java 开发MapReduce里面的驱动类有点相似。具体参数介绍: 下面是对各个参数的详细说明: -input < path>:指定作业输入,path可以是文件或者目录,可以使用*通配符,-input选项可以使用多次指定多个文件或目录作为输入。 -output < path>:指定作业输出目录,path必须不存在,而且执行作业的用户必须有创建该目录的权限,-output只能使用一次。 -mapper:指定mapper可执行程序或Java类,必须指定且唯一。 -reducer:指定reducer可执行程序或Java类,必须指定且唯一。 -file, -cacheFile, -cacheArchive:分别用于向计算节点分发本地文件、HDFS文件和HDFS压缩文件。 -numReduceTasks:指定reducer的个数,如果设置-numReduceTasks 0或者-reducer NONE则没有reducer程序,mapper的输出直接作为整个作业的输出。 -jobconf | -D NAME=VALUE:指定作业参数,NAME是参数名,VALUE是参数值,可以指定的参数参考hadoop-default.xml。 -combiner:指定combiner Java类,对应的Java类文件打包成jar文件后用-file分发。 -partitioner:指定partitioner Java类,Streaming提供了一些实用的partitioner实现,参考KeyBasedFiledPartitoner和IntHashPartitioner。 -inputformat, -outputformat:指定inputformat和outputformat Java类,用于读取输入数据和写入输出数据,分别要实现InputFormat和OutputFormat接口。如果不指定,默认使用TextInputFormat和TextOutputFormat。 -cmdenv NAME=VALUE:给mapper和reducer程序传递额外的环境变量,NAME是变量名,VALUE是变量值。 -mapdebug, -reducedebug:分别指定mapper和reducer程序失败时运行的debug程序。 -verbose:指定输出详细信息,例如分发哪些文件,实际作业配置参数值等,可以用于调试。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5659406.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[Android学习笔记九] Android 开发中图片灰阶(黑白)显示

灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图)。总结一点就是更加一张原始图片来通过颜色的过滤处理计算得到不同显示效果的图片。这方法的API主要位于:android. 使用上文中提到的“三种算法转换彩色灰阶”一文中提到的灰阶计算方法产生的黑白图片显示效果如下图: 说明:通过Use Matrix是使用Android的ColorMatrix和ColorFilter实现,其中设置ColorMatrix的setSaturation(float sat)饱和度设置为0时颜色过滤之后显示灰阶,android.graphics.ColorMatrix的内部实现和具体RGB颜色权重值近似等于图中BT709中的权重。 代码示例(依赖此文中附加的灰阶计算方法封装类) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.activity_grayscale); ButterKnife.bind( this ); BitmapDrawablebd=(BitmapDrawable)Original_ImageView.getDrawable(); Bitmapbitmap=bd.getBitmap(); Log.d(TAG, "w=" +bitmap.getWidth()+ ",h=" +bitmap.getHeight()+ ",c=" +bitmap.getConfig().toString()); //0BT709 Bitmapmatrix=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvascanvas= new Canvas(matrix); Paintpaint= new Paint(); ColorMatrixcolorMatrix= new ColorMatrix(); //传入一个大于1的数字将增加饱和度,而传入一个0~1之间的数字会减少饱和度。0值将产生一幅灰度图像 //AndroidColorMatrix默认的灰阶计算采用下面的BT709标准 colorMatrix.setSaturation(0f); ColorMatrixColorFiltercolorMatrixColorFilter= new ColorMatrixColorFilter(colorMatrix); paint.setColorFilter(colorMatrixColorFilter); canvas.drawBitmap(bitmap,0f,0f,paint); Matrix_ImageView.setImageBitmap(matrix); //原始图片 Bitmapsunflower=XUtils.BitmapUtil.decodeMutableBitmapFromResourceId( this ,R.drawable.sunflower); //1 Bitmaplightness=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Lightness); Lightness_ImageView.setImageBitmap(lightness); //2 Bitmapaverage=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Average); Average_ImageView.setImageBitmap(average); //3 Bitmapluminosity=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Luminosity); Luminosity_ImageView.setImageBitmap(luminosity); //4 Bitmapbt709=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.BT709); BT709_ImageView.setImageBitmap(bt709); //5 Bitmaprmy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.RMY); RMY_ImageView.setImageBitmap(rmy); //6 Bitmapy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Y); Y_ImageView.setImageBitmap(y); } public BitmapgrayScale( final Bitmapbitmap,XUtils.GrayScaleUtil.GrayScalegrayScale){ if ( null ==bitmap|| null ==grayScale){ return null ; } Bitmaprs=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvascanvas= new Canvas(rs); Paintpaint= new Paint(); for ( int x= 0 ,w=bitmap.getWidth();x<w;x++){ for ( int y= 0 ,h=bitmap.getHeight();y<h;y++){ int c=bitmap.getPixel(x,y); int a=Color.alpha(c); int r=Color.red(c); int g=Color.red(c); int b=Color.blue(c); int gc=grayScale.grayScale(r,g,b); paint.setColor(Color.argb(a,gc,gc,gc)); canvas.drawPoint(x,y,paint); } } return rs; } 关于ColorMatrix的介绍参见Android document : 本地:${SDK}/docs/reference/android/graphics/ColorMatrix.html 本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1719008,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop HBase概念学习系列之什么是HBase? (一)

HBase– Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是GoogleBigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。 上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。 此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5481207.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop概念学习系列之Hadoop能做什么?(二)

大数据时代已经到来,金融数据、电商数据、社交数据、游戏数据…….这些数据的规模、结构、增长的速度都给传统数据存储和处理技术带来巨大考验。Hadoop的简单方便、可扩展性和健壮性让其在大数据处理方面占尽优势,其主要适合的应用场景有: 1) 搜索引擎,Doug Cutting设计Hadoop的初衷,就是为了针对大规模的网页快速建立索引。 2) 大数据存储,利用Hadoop的分布式存储能力,例如数据备份、数据仓库等。 3) 大数据处理,利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等。 4) 科学研究,Hadoop是一种分布式的开源框架,对于分布式计算有很大程度地参考价值。 目前,Hadoop已经成长为一个庞大的体系,只要和海量数据相关的领域,都有Hadoop的身影。 预计到2020年,每年产生的数字信息中将会有1/3的内容驻留在云平台中或借助云平台处理。我们需要对这些数据进行分析处理,以获取更多有价值的信息。那么我们如何高效地存储管理这些数据、如何分析这些数据呢?这时可以选用Hadoop系统。 当然,这上面仅仅是部分而已,不多赘述。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5058092.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 16)——字典集合

Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。 字典声明与初始化 Swift字典类型是Dictionary,也是一个泛型集合。 在声明一个Dictionary类型的时候可以使用下面的语句之一。 1 2 varstudentDictionary1:Dictionary<Int,String> varstudentDictionary2:[Int:String] 声明的字典需要进行初始化才能使用,字典类型往往是在声明的同时进行初始化的。示例代码如下: 1 2 3 4 5 varstudentDictionary1:Dictionary<Int,String> =[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] varstudentDictionary2=[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] letstudentDictionary3=[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] 字典遍历 字典遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for-in循环实现的。 下面是遍历字典的示例代码: 1

优秀的个人博客,低调大师

Storm概念学习系列之storm的定时任务

至于为什么,有storm的定时任务。这个很简单。但是,这个在工作中非常重要! 假设有如下的业务场景 这个spoult源源不断地发送数据,boilt呢会进行处理。然后呢,处理后的结果,假设要写到mysql里面。 假设,spout有几十万条,这么过来。写入到bolt,意味着,它一秒钟要调用mysql几十万此。即操作频率太快,这样导致会出现问题。 所以,很有必要进行storm的定时任务!!! storm的定时任务,它可以每隔指定的时间将数据整合一次存入数据库。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7249914.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

openstack学习笔记三 创建第一个实例

登陆admin 创建一个基本网络 镜像 已经安装好操作系统的硬盘文件 计算--镜像--创建镜像 名称centos7.2-1511 镜像源 镜像地址 镜像地址 http://mirrors.163.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso 镜像格式iso 最小硬盘 10GB 最低内存 1024MB 数据复制 不选 公有 选择 计算--实例--启动云主机 云主机名称 test1 云主机启动源 centos7.2-1511 点击 test1 打开控制台 绑定浮动IP 设置安全组 计算--访问安全--添加安全组test 添加规则,然后应用 创建密钥对 把它下载下来 云硬盘 登陆主机 就可以看到了 对象存储(云网盘)可以存自己的文件 本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1795927,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android开发学习笔记:如何移除EditText上的输入焦点

移除EditText上的输入焦点的方法有很多种,下面介绍一种简单实用的方法。 1.先看下面代码的在模拟器上运行的效果 EditTextDemoActivity.java packagecom.android.EditTextDemo.activity; importandroid.app.Activity; importandroid.os.Bundle; publicclassEditTextDemoActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } } main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> strings.xml <?xmlversion="1.0"encoding="utf-8"?> <resources> <stringname="hello">HelloEditText!</string> <stringname="app_name">EditTextDemo</string> </resources> 效果图: 这时的光标是在第一个EditText闪烁的,第二个EditText却没有 2.将上面的main.xml改成如下所示,即是将第一个EditText的高度,宽度改为0dp,这样就能覆盖有光标闪烁的第一个EditText,从而达到了移除EditText上的输入焦点的效果 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:layout_width="0dp" android:layout_height="0dp" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 效果图: 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/627850

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 31)——存储属性

Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据。 存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义)。 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体。它们的类图如下,Employee的部门属性dept与Department之间进行了关联。 我们可以在定义存储属性时指定默认值,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Employee{ letno:Int= 0 varname:String= "" varjob:String? varsalary:Double= 0 vardept:Department? } structDepartment{ letno:Int= 0 varname:String= "" } letemp=Employee() emp.no= 100 //编译错误:修改常量属性,程序会发生编译错误 letdept=Department() dept.name= "SALES" //编译错误:dept是值类型,值类型不能修改,即便它的属性name是变量属性,也不能修改 letemp1=Employee() emp1.name= "Tony" 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746594,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux学习笔记 - 第二章 Linux操作系统

1.硬件架构及系统组成 |--硬件架构 可用于运行linux系统的硬件架构 包括:x86 , x64(amd64) , m6800 , m68k , Arm , ultrasparc , power , powerpc(ppc) , MIPS , alpha , ... |--系统组成 硬件 内核 系统调用 库函数 外部应用 ... 2.Linux版本 2.1 Linux核心版本 稳定版本:2.2.x , 2.4.x , 2.6.x , 3.0.x , 4.0.x 开发版本:2.3.x , 2.4.x , 2.5.x , 版本中数字所表达的含义:主版本.次版本.释出版本-修订版本 2.2 Linux发行版 由各个商业组织、社区组织以Linux核心为基本,增加很多应用程序,让后一起打包并 发行出的版本 目前存在的发行版有数百种之多,比较主流的是以下几种 Debian Ubuntu mint knopix slackware S.u.S.E SLES-S.u.S.E Linux Enterprise Server OpenSUSE RedHat Red Hat Enterprise(RHEL) RHEL 7.2 CentOS-Community Enterprise OS Fedora Core(每6个月更新) Gentoo ArchLinux GNU/Linux<===发行特点:通常以源码方式发行 2.3 Linux发行版版本号 发行版本有自己的版本号 例子:RHEL:5.x,6.x,7.x Fedora:23 Debian:8.x OpenSuSE:13.x 3.获取Linux版本 核心获取:www.kernel.org 发行版获取:通过各发行版的官方网站,或国内镜像站点:mirrors.163.com , mirrors.sohu.com , mirrors.aliyun.com 4.Linux哲学思想: 4.1 一切皆文件:把几乎所有资源统统抽象为文件形式,包括硬件设备,甚至通讯接口类; 例如:open(),read(),write(),close(),delete(),create(); 4.2 由众多功能单一的程序组成,一个程序只做一件事,并且做好;即:组合小程序完成复杂任务; 4.3 尽量避免与用户交互, 目标:易于以编程的方式实现自动化任务; 4.4 使用文本文件保存配置信息; 示例:硬件设备也通过文件表示 物理终端:/dev/console 虚拟终端:/dev/tty#[1..6] 串行终端:/dev/ttys# 伪终端:/dev/pts/# 5.安装Linux 5.1 硬件直接安装 安装方法:通过DVD-R,USB,网络等 5.2 通过虚拟机安装 虚拟化平台:Vmware workstation , Oracle VirtualBox 安装方法:通过ISO镜像文件或本地物理光盘驱动器 6.Linux登录 6.1 GUI用户界面(Graphic User Interface) 比较主流的图形界面接口有:KDE , GNome 6.2 CLI用户界面(Command Line Interface) 比较主流的命令行接口有:bash , sh , tsh , csh 6.3 接口提示符说明 [root@node1 ~]# COMMAND prompt: root:当前登录的用户 node1:当前主机的主机名,非完整格式;完整格式一般为:node1.domain.com ~:用户当前所在的目录(current directory),也称为工作目录(working directory),为相对 路径; #:命令提示符,#为管理员提示符,$为普通用户提示符;管理员拥有最高权限,可以执行所有 操作;普通用户不具有管理权限,不能进行管理操作; 6.4 Linux终端 物理终端:是指控制台,Console 虚拟终端:使用tty标识,默认启用6个,可以通过Ctrl+Alt+F[1..6]进行切换 图形终端:可以在CLI下启用startx启动,可以通过Ctrl+Alt+F7切换;在新版本的CentOS下, startx在哪个虚拟终端下启动,就是用该虚拟终端的编号; 串行终端:使用ttys标识 伪终端:使用pts标识,SSH连接方式属于伪终端 示例: ~]# tty<===显示当前运行的终端设备 7.程序管理 程序的组成部分:指令+数据 二进制程序 配置文件 库文件 帮助文件 程序包管理器 程序的组成文件打包成一个或有限几个文件 安装 卸载 查询 各版本Linux程序包管理 Debian:dpkg,apt-get RedHat:rpm,yum --> dnf S.u.S.E:rpm,zypper ArchLinux:port Gentoo:完全源码 LFS:Linux From Scratch kali:集成了很多黑客工具 8.Linux系统中命令类型 |--外部命令:由外部应用(第三方)提供的应用 |--内部命令:shell内部的应用 |--查看方法: ~]# type COMMAND ~]# *** builtin<===此显示结果说明命令为内部命令 ~]# '显示为文件路径'<===此显示结果说明命令为外部命令 ---Note---命令可以有别名,别名可以与原名相同,此时原名被隐藏,此时如果要运行原命令则使 用\COMMAND 本文转自careluck51CTO博客,原文链接: http://blog.51cto.com/brave8898/1851054 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 46)——下标重写

下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。 下面看一个示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 classDoubleDimensionalArray{ letrows:Int,columns:Int vargrid:[Int] init(rows:Int,columns:Int){ self.rows=rows self.columns=columns grid=Array(count:rows*columns,repeatedValue: 0 ) } subscript(row:Int,col:Int)->Int{ //定义下标 get{ return grid[(row*columns)+col] } set{ grid[(row*columns)+col]=newValue } } //定义下标 } class SquareMatrix:DoubleDimensionalArray{ overridesubscript(row:Int,col:Int)->Int{ //重写父类下标 get{ return super .grid[(row*columns)+col] } set{ super .grid[(row*columns)+col]=newValue*newValue } } } varary2=SquareMatrix(rows: 5 ,columns: 5 ) for vari= 0 ;i< 5 ;i++{ for varj= 0 ;j< 5 ;j++{ ary2[i,j]=i+j } } for vari= 0 ;i< 5 ;i++{ for varj= 0 ;j< 5 ;j++{ print( "\t\t\(ary2[i,j])" ) } print( "\n" ) } 其中super.grid[(row * columns) + col]语句中使用super调用父类的grid属性。 其中super.grid[(row * columns) + col] = newValue * newValue语句是给父类的grid属性赋值。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747531,如需转载请自行联系原作者

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 49)——扩展声明

声明扩展的语法格式如下: 1 2 3 extension类型名{ //添加新功能 } 声明扩展的关键字是extension,“类型名”是Swift中已有的类型,包括类、结构体和枚举,但是我们仍然可以扩展整型、浮点型、布尔型、字符串等基本数据类型,这是因为这些类型本质上也是结构体类型。打开Int的定义如下: 1 2 3 4 5 6 7 8 9 structInt:SignedInteger{ init() init(_value:Int) static funcconvertFromIntegerLiteral(value:Int)->Int typealiasArrayBoundType=Int funcgetArrayBoundValue()->Int static varmax:Int{get} static varmin:Int{get} } 从定义可见Int是结构体类型。不仅是Int类型,我们熟悉的整型、浮点型、布尔型、字符串等数据类型本质上都是结构体类型。 Swift中的扩展机制可以在原始类型中添加的新功能包括: 实例计算属性和类型计算属性 实例方法和类型方法 构造函数 下标 还有嵌套类型等内容也可以扩展,扩展还可以遵从协议。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747536,如需转载请自行联系原作者

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 45)——重写方法

重写实例方法 在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。 下面看一个示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 class Person{ varname:String varage:Int funcdescription()->String{ //实例方法 return "\(name)年龄是:\(age)" } class funcprintClass()->(){ //静态方法 print( "Person打印..." ) } init(name:String,age:Int){ self.name=name self.age=age } } class Student:Person{ varschool:String convenienceinit(){ self.init(name: "Tony" ,age: 18 ,school: "清华大学" ) } init(name:String,age:Int,school:String){ self.school=school super .init(name:name,age:age) } overridefuncdescription()->String{ //重写实例方法description,重写的方法前面要添加关键字override print( "父类打印\(super.description())" ) return "\(name)年龄是:\(age),所在学校:\(school)。" } override class funcprintClass()->(){ //重写静态方法printClass print( "Student打印..." ) } } letstudent1=student() print( "学生1:\(student1.description())" ) //调用了description方法 Person.printClass() Student.printClass() 使用super.description()语句调用父类的description方法,其中super指代父类实例。 重写静态方法printClass,在静态方法中不能访问实例属性。 调用了description方法。由于在子类中重写了该方法,所以调用的是子类中的description方法。输出结果是: 父类打印Tony年龄是: 18 学生1:Tony年龄是: 18,所在学校:清华大学。 为了测试静态方法重写,调用Person.printClass()语言,它是调用父类的printClass静态方法,输出结果是: Person打印... 调用Student.printClass()语言,它是调用子类的printClass静态方法,输出结果是: Student打印... 重写静态方法 与类的静态属性定义类似,静态方法使用class或static关键字,但是使用哪一个要看子类中是否重写该方法。class修饰的静态方法可以被重写,static关键字就不能被重写。 示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Account{ varowner:String= "Tony" //账户名 //不能换成static class funcinterestBy(amount:Double)->Double{ //静态方法 return 0.08886 *amount } } class TermAccount:Account{ //定期账户 //可以换成static override class funcinterestBy(amount:Double)->Double{ //静态方法 return 0.09 *amount } } //调用静态方法 print(Account.interestBy(10_000. 00 )) print(TermAccount.interestBy(10_000. 00 )) 由于被重写所以代码class funcinterestBy(amount: Double) -> Double中的class不能换成static。静态方法interestBy可以使用class或static,除非在TermAccount的子类中重写方法interestBy。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747504,如需转载请自行联系原作者

优秀的个人博客,低调大师

android用户界面之Gallery3D学习资料汇总

一、Gallery之根蒂根基教程 1.Android Gallery与衍生BaseAdapter容器 http://www.apkbus.com/android-6249-1-1.html 2.Android 根蒂根基 UI 编程之八(相簿浏览 Gallery) http://www.apkbus.com/android-14004-1-1.html 3.android Gallery的进修心得 http://www.apkbus.com/android-17606-1-1.html 4.Android入家世十三篇之Gallery + ImageSwitcher http://www.apkbus.com/android-220-1-1.html 5.Android---UI篇---Gallery(画廊视图) http://www.apkbus.com/android-14231-1-1.html 6.Android Gallery组件详解 http://www.apkbus.com/android-6204-1-1.html 7.Android 控件之Gallery图片集 http://www.apkbus.com/android-1340-1-1.html 8.Android Gallery的简单应用 http://www.apkbus.com/android-7039-1-1.html 9.Gallery3D笔记 http://www.apkbus.com/android-1955-1-1.html 10.Gallery3D各个界面可见局限策画办法 http://www.apkbus.com/android-1952-1-1.html 11.Android对Gallery的商量 http://www.apkbus.com/android-13211-1-1.html 12.Android Gallery3D源码解析 http://www.apkbus.com/android-51639-1-1.html 二、Gallery殊效教程 1.Android中实现Gallery 点击放大 http://www.apkbus.com/android-1017-1-1.html 2.Android中Gallery和ImageSwitcher同步主动(迁移转变)播放图片库 [color=#999999 !important] http://www.apkbus.com/android-19172-1-1.html 3.Android控件之Gallery实现图片列表 http://www.apkbus.com/android-14327-1-1.html 4.Android gallery实现图片的阁下轮回扭转源码分享 http://www.apkbus.com/android-745-1-1.html 5.android开辟之gallery(画廊) http://www.apkbus.com/android-15749-1-1.html 6.Gallery 图片拖动结果(实例+贴图) http://www.apkbus.com/android-1009-1-1.html 7.应用长途图片填充Gallery http://www.apkbus.com/android-51641-1-1.html 8.Android Gallery3D结果 教程 案例 代码 http://www.apkbus.com/android-51642-1-1.html 9.哄骗Gallery来实现缩略图浏览器 http://www.apkbus.com/android-51643-1-1.html 三、Gallery实例源码 1.应用Android自带Gallery组件实现CoverFlow,源码+解析 http://www.apkbus.com/android-13321-1-1.html 2.Android自定义Gallery,实现CoverFlow结果 http://www.apkbus.com/android-18441-1-1.html 3.一个Gallery 3D结果实例 http://www.apkbus.com/android-39891-1-1.html 4.gallery走廊结果图片查看器 http://www.apkbus.com/android-794-1-1.html 5.经由过程SurfaceView实现像Gallery手势滑动图片结果 http://www.apkbus.com/android-12828-1-1.html 6.android Gallery实现异步加载收集图片 并只加载当前停止页面图 http://www.apkbus.com/android-51646-1-1.html 7.连络ImageSwithcer和Gallery控件建造一个图片浏览(附源代码) http://www.apkbus.com/android-51651-1-1.html 转自:链接 本文转自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/5099343.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册