App架构师实践指南一之App基础语法
第二章:App基础语法
1、编程范式
编程范型或编程范式(programming paradigm),是指从事软件工程的一类典型的编程风格。常见的编程范式有过程化(命令行)编程、事件驱动编程、面向对象编程以及函数编程等。
2、封装、继承与多态
OO(面向对象)思想中有三大支柱,分别为封装、继承、多态。
封装是OO概念中最基础的,其本质可以理解成将一堆函数和一堆对象放在一起,对外暴漏接口,隐藏具体执行细节。
继承是OO中一个重要概念,如果处理不好,就容易导致高耦合,使用时应注意:
-父类和子类职责明确,各司其职,互不干扰。
-父类的所有变化都要体现到子类;父类为子类提供服务,但不应该涉及子类具体业务。
多态一般要结合继承一起使用,本质上子类通过覆盖或重载父类的方法,来使得对同一类对象同一方法对调用产生不同对结果。
3、内部类的使用和思考
使用内部类最大的优点就在于,它能够非常好地解决多重继承的问题。
内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类/嵌套内部类。
-成员内部类。成员内部类是最普通的内部类,它位于另一个类内部。
-局部内部类。指定义指一个方法或者一个作用域内的类,访问权限仅限于方法内或者该作用域内。
-匿名内部类。匿名内部类指没有名字、没有构造方法的局部内部类。
-静态内部类/嵌套内部类。static关键字修饰的是不需要依赖于外部类的内部类。
4、实际使用中需要注意的问题
-成员内部类可以无条件地访问外部类的所有成员属性和方法(包括private和static成员);当与外部类拥有相同名称的方法或变量时,默认访问的是成员内部类成员或变量,若要访问外部类成员或变量,需要用new classNae.成员()/变量名的方法,如果是静态成员/变量,可以直接用className.成员()/变量名()访问
-成员内部类依赖于外部类,创建内部类对象时需先创建外部类,而静态内部类创建则不需要依赖于外部类。
-成员内部类中不能存在任何static的变量和方法,而静态内部类不能使用任何外部类的非static成员变量和方法
-建议中外部类中通过getXX()获取成员内部类,尤其是该内部类的构造函数无参数时
-使用匿名内部类时,必须也只能继承一个类或者实现一个接口;匿名内部类中不能定义构造函数,不能存在任何的静态成员变量和静态方法。
-匿名内部类的形参必须使用final修饰,避免引用值的变化
-使用匿名内部类时,一定要慎重对待内存泄漏(内部类保持类外部类的引用实例,内部类不销毁,外部类就无法被回收)。一般用静态内部类+弱引用方式或者动态代理方式替代。
5、线程与进程
一个进程可以包括多个线程,其内存空间时共享的,每个线程都可以使用这些共享内存,通过互斥锁(Mutex)来防止多个线程同时读写某一块内存区域,通过“信号量”(Sempahore)来保证多个线程不会相互冲突。多线程时一种利用CPU同时处理多个任务从而提高软件工作效率和资源利用率多方法,但是,当线程过多时,会消耗大量的CPU资源,且每开一条线程本身也是有开销的(如ios中,主线程占用1MB的内存空间,子线程占用512KB,可以使用-setStackSize设置,但必须是4KB的倍数,而且最小是16KB;线程的创建时间大概90ms)。多线程中,又会涉及线程池的管理,可以保证多线程使用中的服用、并发以及性能把控。
6、反射
反射(Reflection)是程序中运行状态中动态检测、访问或者修改类型的行为特征,具体表现为
-对于任意一个类,都能知道这个类的所有属性和方法
-对于任何一个对象,都能够调用它的任何一个方法和属性
7、注解
注解(Annotation),也叫元数据,是一种代码级别的说明,在java中,Annotation是JDK 1.5以后版本引入的一个特性,与类、接口、枚举属同一层次,可以声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明和注释。其本身只是一个标记,之所以产生作用,在于对其解析【java提供类一种源程序中的元素关联任何信息或者任何元数据的途径和方法】
8、泛型
泛型是java 1.5引入的特性,主要目的是为解决数据类型的安全性问题,具体包括泛型类、泛型接口及泛型方法。
App架构师实践指南一之App基础语法的更多相关文章
- App架构师实践指南二之App开发工具
App架构师实践指南二之App开发工具 1.Android Studio 2.编译调试---条件断点.右键单击断点,在弹出的窗口中输入Condition条件.---日志断点.右键单击断点,在弹 ...
- App架构师实践指南六之性能优化三
App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190 内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...
- App架构师实践指南四之性能优化一
App架构师实践指南四之性能优化一 1.性能维度常见用来衡量App性能的维度如图9-1所示.其中,性能指标包括电池(电量/温度).流量(上行流量/下行流量等).CPU(平均/最大/最小).内存 ...
- App架构师实践指南五之性能优化二
App架构师实践指南五之性能优化二 2018年07月30日 13:08:44 nicolelili1 阅读数:214 从UI和CPU方面来说App流畅体验优化,核心为流畅度/卡顿性能优化. 1.基 ...
- App架构师实践指南三之基础组件
App架构师实践指南三之基础组件 1.基础组件库随着时间的增长,代码量的逐渐积累,新旧项目之间有太多可以服用的代码.下面是整理的公共代码库. 2.关于加密密钥的保护以及网络传输安全是移动应用安全最关键 ...
- 网易新闻App架构重构实践:DDD正走向流行
网易新闻App架构重构实践:DDD正走向流行 https://mp.weixin.qq.com/s/FdwrT_xn3CQqpWoRVBttvQ 小智 InfoQ 2020-05-14 作者 | 小智 ...
- 【架构师之路】APP架构师必看:面对爆发流量如何进行架构调整
一.APP架构与WEB架构的最大不同 移动APP的架构和传统PC的WEB架构有三点不同: 1.连接的稳定性.在传统的web端连接成功后就可以认为它是稳定的,但在移动端.无线端,APP连接非常敏感,可能 ...
- 零基础到架构师 不花钱学JavaEE(基础篇)- 概述
Java简单来说是一门语言,Java能干什么? 网站:开发大,中,小型网站. 服务器端程序:企业级程序开发. APP:Android的APP基本使用Java开发. 云:Hadoop就是使用Java语言 ...
- 【大数据系统架构师】0.1 Java编程基础
1. 初识Java 2. Java语法 快速入门点我 2.1 数据类型和运算符 2.2 流程控制语句 2.3 数组 2.4 类和对象 2.5 OOP三大特性 2.6 集合框架与泛型 2.7 反射机制 ...
随机推荐
- CPU密集型 VS IO密集型
CPU密集型 CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的 ...
- mysql的undo log和redo log
在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,有这么两 ...
- python接口自动化测试十五:解决密码动态,无法登录情况
解决问题:每次密码都是变化的,无法通过账号密码登录 (总不能每次去fiddler复制吧????) 解决思路: 1.先用selenium调用浏览器(不会selenium的自己想办法了), 2.登录后从浏 ...
- 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)
说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...
- Redis设置Key/value的规则定义和注意事项(附工具类)
对于redis的存储key/value键值对,经过多次踩坑之后,我们总结了一套规则:这篇文章主要讲解定义key/value键值对时的定义规则和注意事项. 前面一篇文章讲了如何定义Redis的客户端和D ...
- springbank 开发日志 一次因为多线程问题导致的applicationContext.getBean()阻塞
几天前遇到的这个问题.由于交易是配置的,不同的交易是同一个类的不同实例,所以不可能提前将其以@autowired类似的方式注入到需要的类中 <op:transaction id="Re ...
- POJ 3190 Stall Reservations【贪心】
POJ 3190 题意: 一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作.给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器.思路:先按奶牛要求的时间起始点进行从小到大排序 ...
- python全栈开发day21面向对象初识总结
- 2015 Benelux Algorithm Programming Contest I- Interesting Integers
题目大意:给你一个数字n(n<=1e9) ,让你求一个能包含这个数的斐波那契数列的第一项a 和第二项b,找出b最小的那个. 帮我复习了一下扩展欧几里得.... 思路:a,b,a+b,a+2b…… ...
- 用HTML+CSS画出一个同心圆
参加web前端校招的同学们经常会遇到这样的面试题:用HTML+CSS画出一个同心圆. 例如: 这道题主要考验的是基础盒模型布局能力和倒圆角属性的巧用. 1.html代码 <body> &l ...