马剑威

java基础-反射技术(磨砺营马剑威java)

不羁的心 提交于 2020-04-09 22:15:28
​ 在Java运行时环境中,对于任意一个类,能否知道这个类的哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制。 反射给java提供了,运行时获取一个类实例的可能,这一点非常灵活,你仅仅传一个类的全限定名,就能通过反射,来获取对应的类实例,我们一般会用Class类,来调用这个被反射的Objcet类下的:构造方法,属性,或方法等。 反射在一些开源框架里用的非常之多,Spring,Struts,Hibnerate,MyBatics都有它的影子,反射虽然很灵活,能够使得写的代码,变的大幅精简,所以在用的时候,一定要注意具体的应用场景。 反射的优缺点如下: 优点: A:能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。 B:与Java动态编译相结合,可以实现无比强大的功能 缺点: A:使用反射的性能较低 B:使用反射相对来说不安全 C:破坏了类的封装性,可以通过反射获取这个类的私有方法和属性 任何事物,都有两面性,反射的优点,也同是就是它的缺点,所以,没有好与坏,只有最合适的场景,一阴一阳,才是天道平衡的条件。 在反射API中我们重点关注一下几个类: Class -- 代表类 Field -- 代表属性(成员变量) Method -- 代表方法

分享几款Android开发工具助力APP开发(磨砺营马剑威Android)

两盒软妹~` 提交于 2020-03-25 09:10:53
3 月,跳不动了?>>> 【威哥说】搞Android开发,不使用工具怎么行呢?今天给大家推荐这3款工具,是目前Android开发最强大的集成框架,拿来直接就可以开发app,无数的线上应用使用了这些框架,xUtils也是很多公司的首选。 你还可以关注: 【链接】磨砺营出大事了…… 【链接】Android开发还能这样学 【链接】威哥要直播啦,裸看真男人 【正文】 1、Afinal框架 项目地址: https://github.com/yangfuhai/afinal 主要有四大模块: (1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。 (2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 (3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。 (4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。 FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2

移动开发之开源协议(磨砺营马剑威Android)

故事扮演 提交于 2020-03-25 08:52:40
3 月,跳不动了?>>> 目前开源的协议可以参考GNU组织的开源许可协议:[具体参考链]。(http://www.gnu.org/licenses/license-list.html) 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种:具体参考链。 下面来看几个例子: Facebook的Github中的开源项目大部分都是使用BSD开源协议,BSD协议允许使用者修改和重新发布代码(以其他协议形式),允许闭源商业发布和销售,如果在再发布的产品中包含源码,则必须带有原来代码中的BSD协议,不可以使用Facebook的名字来做市场推广等。 Google的Android则是使用Apache v2 License协议 ,这个协议和BSD类似,允许修改代码再发布,可以用作商业软件而不用公布修改之后的源码,但是这个协议鼓励代码共享尊重作者的著作权。 Linux 使用了GPL 协议,而GPL代码规定所有使用了GPL代码的代码,必须开源。如果一些商用软件采用了GPL开源协议的源码,则必须公布自己的源码。 下面是一些常见的开源许可证的介绍,具体就不多说了,自己平时不论是使用别人的开源项目还是自己开源产品,一定要记得选好开源协议。 开源许可证的一些介绍 ##Apache v2 License Apache

java虚拟机浅谈(磨砺营马剑威java)

↘锁芯ラ 提交于 2020-03-02 03:16:11
Java虚拟机(Java Virtual Machine)简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 什么是Java虚拟机 Java虚拟机(Java Virtual Machine简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境它是Java最具吸引力的特性之一。 Java虚拟机的特点 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 Java虚拟机的使用主体 Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员

可穿戴应用helloworld

谁说我不能喝 提交于 2019-12-13 18:31:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 可穿戴应用可以直接运行在可穿戴的设备上。拥有访问类似传感器的硬件权限,还有操作activity,services等权限。 当我们想要将可穿戴设备应用发布到Google Play商店时,我们需要有该应用的配套手持设备应用。因为可穿戴设备不支持Google Play商店,所以当用户下载配套手持设备应用的时候,会自动安装可穿戴应用到可穿戴设备上。手持设备应用还可以用来处理一些繁重的任务、网络指令或者其它工作,和发送操作结果给可穿戴设备。 这节课会介绍如何安装一个设备或者模拟器,和如何创建一个包含了手持应用与可穿戴应用的工程。 升级 SDK 在开始建立可穿戴设备应用前,必须: • 将SDK工具升级到23.0.0或者更高的版本   升级后的SDK工具使我们可以建立和测试可穿戴应用。 • 将SDK升级到 Android 4.4W.2(API 20) 或者更高   升级后的平台版本为可穿戴应用提供了新的 API。 搭建Android Wear模拟器或者真机设备。 我们推荐在真机上进行开发,这样可以更好地评估用户体验。然而,模拟器可以使我们在不同类型的设备屏幕上进行模拟,这对测试来说非常有用。 搭建Android Wear虚拟设备 建立Android Wear虚拟设备需要下面几个步骤: 1 点击Tools > Android

java基础-反射浅析(磨砺营马剑威java)

徘徊边缘 提交于 2019-12-10 20:43:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 【威哥说】本文里波波老师将带领大家一起学习一下什么是反射,文中暂且没有详细给大家介绍反射如何去获取类中的所有属性和方法,更多的是介绍什么场景下会使用到反射,使用反射有什么好处和缺点,大家有自己的理解也可以相互探讨。 反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 这是百度百科里的一个说法,我曾经还看到一个对反射的描述为:在运行状态中,对于任意一个class类,都能知道此类的所有属性和方法,对于任意一个对象都能对他的属性和方法进行调用。那在我的理解来看,就是动态的获取一个类的所有属性和方法。这个可以理解为反射的概念,或者说作用。 那么反射的使用在那些场景中呢?应用场景如下:当程序写完之后,如果想添加功能,没法直接创建对象(注意:此处是因为一个完整的程序代码已经成型了,封装好了,你无法直接创建对象),但是一般程序会在定义结构时为了扩展而对外提供接口,所以我们通过实现这个接口,并在使用时告诉程序类名称,然后去通过反射找到class文件,并针对其中的元素进行操作;第二就是为了适应变化,你传入什么类型,我对什么类型进行具体的操作,这类一般用于数据解析。 一般应用: 1、比如java中连接数据库操作时,内部的连接操作已经写好了,如果密码发生变化,我们不需要改变原有的代码逻辑

java中同步的实现(磨砺营马剑威java)

こ雲淡風輕ζ 提交于 2019-12-06 19:49:50
在Java中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchronized(this)与synchronized(staticXXX)的区别了,synchronized就是针对内存区块申请内存锁,this关键字代表类的一个对象,所以其内存锁是针对相同对象的互斥操作,而static成员属于类专有,其内存空间为该类所有成员共有,这就导synchronized()对static成员加锁,相当于对类加锁,也就是在该类的所有成员间实现互斥,在同一时间只有一个线程可访问该类的实例。如果只是简单的想要实现在JAVA中的线程互斥,明白这些基本就已经够了。但如果需要在线程间相互唤醒的话就需要借助Object.wait(), Object.nofity()了。Obj.wait(),与Obj.notify()必须要与synchronized(Obj)一起使用,也就是wait,与notify是针对已经获取了Obj锁进行操作,从语法角度来说就Obj.wait(),Obj

java中进程同步浅谈(磨砺营马剑威java)

爱⌒轻易说出口 提交于 2019-12-06 19:49:37
在Java中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchronized(this)与synchronized(static XXX)的区别了,synchronized就是针对内存区块申请内存锁,this关键字代表类的一个对象,所以其内存锁是针对相同对象的互斥操作,而static成员属于类专有,其内存空间为该类所有成员共有,这就导致synchronized()对static成员加锁,相当于对类加锁,也就是在该类的所有成员间实现互斥,在同一时间只有一个线程可访问该类的实例。如果只是简单的想要实现在JAVA中的线程互斥,明白这些基本就已经够了。但如果需要在线程间相互唤醒的话就需要借助Object.wait(), Object.nofity()了。 Obj.wait(),与Obj.notify()必须要与synchronized(Obj)一起使用,也就是wait,与notify是针对已经获取了Obj锁进行操作,从语法角度来说就是Obj.wait(),Obj

Android如何实现后台唤醒(磨砺营马剑威Android)

て烟熏妆下的殇ゞ 提交于 2019-12-05 13:04:33
一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机制。 官方对于WakeLock的解释: PowerManager:This class gives you control of the power state of the device. PowerManager.WakeLock: lets you say that you need to have the device on. Android 系统支持应用程序及服务在待机前保存程序运行状态,如待机前关闭文件读写、usb 操作、暂停音乐播放;也支持唤醒后的程序状态恢复,如恢复打开文件进行读写操作,恢复 usb 操作、恢复音乐播放等。这些状态的保存和恢复功能可以保证系统在待机唤醒后能正常工作。 主要提供两种方式: 1、待机广播消息和唤醒广播消息。 2、Wakelock 锁机制。 分为两个部分说明一下: 1、android

对学习Android 的初学者几点建议(磨砺营马剑威Android)

試著忘記壹切 提交于 2019-12-04 06:14:54
【威哥说】初学者需要人带,更需要好的建议,在与网友的对话中,让我感悟很深,为此写下这篇文章与大家一起分享,如果对你有些许帮助,我会很欣慰 以下是网友“打不死的小强”与“威哥”的精彩对话: 打不死的小强:“我想转行学Android” 威哥:“可以说说你的想法哦” 打不死的小强:“工作不好找,听说搞Android开发工资挺高的,所以想转行” 威哥:“你是学什么专业的?” 打不死的小强:“跟计算机一点关系都没有,生物类的,工作两年了,做销售” 威哥:“哦,你自己感觉上学时数学成绩好吗?” 打不死的小强:“还可以吧,理科比文科强,自己也一直比较喜欢理科” 威哥:“毕业两年自己自学过编程语言吗” 打不死的小强:“最近才有想法学习编程,所以也是一个月前开始了解Java的,也一直关注你的公众号哦,虽然很多都看不懂,但现在起码知道了很多名词,也学到不少东西,谢谢威哥(呲牙),很想跟威哥学习” 威哥:“嗯,有进步就好,能帮助到你我也很开心,没基础的话,我也不建议你马上过来,我这是要有些基础的,你的基础情况符合的话,我会建议你先报名,然后我这会安排老师通过基础视频的方式先远程安排并辅导你如何学习,然后通过考核了再过来,否则你要是学不会,大家都白瞎了(^^)” 打不死的小强:“好的,谢谢威哥,现在用良心做教育的不多了,你是其中一个” 威哥:“谢谢你的鼓励,这也是一直想做的事情” 威哥:“你的网名很有个性