Java基础知识回顾

1、面向对象的三大特性:封装、继承、多态

封装:对类的访问进行限制,决定了哪些类有权限访问这个类。在Java上表示为访问修饰符,public对所有的类开放,protected仅对子类开放,default仅对相同包名的类开放(在开发中,没有任何访问修饰符就为 default),private仅对本类开放

继承:让类与类之间存在关系,子类继承父类,子类则拥有父类的特性,子类可以在父类的基础进行扩展。另外Java还出了接口,这个是对类在不影响继承关系下进行扩展,这个接口解决了类只能单继承的弊端,一个类可以通过实现多种接口获得新特性

多态:在继承的基础上进行变换,既然能通过继承或者实现的方式使得获取新特性,这些特性都是在父类或者接口定义的,那么换过来想,子类可以直接作为父类或者接口来使用。在单继承或者多实现的情况下,类的关系都将会变得复杂,这个时候需要运用Java多态的特性,很多情况下都不需要关心这个子类对象有什么特性,因为我们没有运用到,那么可以把子类进行简化,简化成它的父类类型或者接口类型,更加明确了对象的作用。在Java大多表现为面向接口编程,例如 List 类型可以通过子类 ArrayList 进行创建(List list = new ArrayList()),虽然 ArrayList 是 List 的一个具体的实现对象,但是我们没有运用到 ArrayList 的特性,我们可以直接将这个对象当成 List 类型来使用,面向对象三大特性只是一种思想,需要我们真正了解才能运用得好

2、final关键字

final 是最终的意思,这个是Java的修饰符,在类、字段、方法有不同的作用

在类上面:表示这个类不能被继承了,也就是说被 final 修饰的类不会有子类

在字段上面:表示这个字段只能被赋值一次,并且只能在对象初始化完成之前赋值完成

在方法上面:表示这个方法不能被子类重写,保证方法的安全性.

3、static 关键字

static是静态的意思,这个是Java的修饰符,在类、字段、方法也有不同的作用

在类上面:不能修饰外部类(因为它本身就是独立的),一般修饰内部类(修饰之后就变成了静态内部类),代表这个内部类是独立的,不需要和外部类有直接来往(访问外部类的对象、字段、方法)

在字段上面:代表这个字段所在的类无论被创建多少次,它都只被创建一次并且是在第一次,也就是说,这些对象上面被 static 修饰的字段都是同一个对象

在方法上面:代表这个方法是独立于对象之外,不需要通过实例化(new)对象,而可以直接通过类名访问这个静态方法

4、instanceof关键字

这个是Java中判断对象类型的关键字,它可以有效避免错误的强转带来的类型转换异常(ClassCastException),先判断这个对象是不是某一种类型的Class ,如果是就可以进行强转,不用担心抛出异常导致程序崩溃。

需要注意两点:

1. 如果判断的对象为空,不管这个对象的类型符不符合要求,instanceof 的结果都为 false

2. 如果同时判断两种类型,并且这两种类型是子父类关系,需要注意判断的顺序,先判断子类类型再判断父类类型,因为如果这个对象是子类的对象,不管是判断子类类型还是父类类型都会返回 true,所以这里我们需要先判断是不是子类类型,如果不是子类类型再判断是不是父类类型

5、进程

为了保证不同的应用程序不能互相访问,所以给每个应用程序单独了设置了一个进程,应用程序运行在进程之中,一般情况下一个应用程序只有一个进程,进程与进程不能直接访问,需要通过安卓跨进程通讯 Binder 机制进行通讯。

线程:线程运行在进程之中,必须依赖进程才能存活,线程可以通过抢占CPU的执行权来执行这个线程中的任务,所以线程也就有了优先级这个概念,我们可以通过给线程设置优先级来提升对CPU的抢占率,从而提高任务的执行速度

6、多线程安全的问题

多个线程同时执行,并且向同一个对象进行修改操作的时候,这个时候就会引发线程安全的问题,这个是由于线程执行的不确定性和不完整性导致的,我们不知道线程什么时候执行,什么时候执行完毕,线程总是执行一会儿然后停顿一会儿留点时间给其他线程执行,这样线程之间的交替交叉执行,如果只是对数据的读取操作,则不会出现问题,但是如果写入操作中,数据还没有来得及改变,导致其他线程访问到还只是改变之前的数据

解决方法:

  一、使用synchronized (synchronized 修饰普通方法、静态方法、代码块时的差异)

  二、使用lock (java中实现同步的两种方式:syschronized和lock的区别和联系

7、对象序列化

对象序列化是保存对象内容的一种方式,我们可以通过序列化,将这个对象保存成一个数据进行传输,接收方再通过这个数据解析成对象,在Android跨进程通讯中,是不支持使用对象直接通讯的方式,所以需要通过序列化的方式去传递数据

Serializable:这个是Java出的一种序列化方式

Parcelable:这个是Android出的一种序列化方式

Serializable代码的实现方式:

Parcelable的代码实现:

可以很直观得看出 Serializable 用起来比 Parcelable 更简单得多,同样是接口,Serializable 只需要实现这个接口即可,而 Parcelable 需要实现它的 writeToParcel 方法,同时要多创建一个的对象构造函数,还要创建一个内部类,这个内部类的代码思路很简单,创建需要被序列化类的实例对象和数组对象

都说 Parcelable 的效率比 Serializable 要高,那么到底高在哪儿了

Serializable 接口什么方法都没有,而 Parcelable 却要做这些读取保存的操作,同样是接口,同样是序列化,究竟是因为什么导致?

我们设想一下,假如让我们实现和 Serializable 一样的效果,我们会怎么做?或许根本不用想,只能通过反射的形式,反射获取对象字段的值,再通过反射创建一个这个类型的对象,最后再通过反射给这个新对象的字段赋值,从而达到这个新对象里面的内容和之前对象的内容是相同的,虽然它们不是同一个对象,但是对象里面的内容是相同的

Serializable 至少要通过三次以上反射才能完成对对象的Copy,我们都知道反射是一个耗性能低效率的操作,在反射次数比较少的情况下,我们可以忽略不计,如果在反射次数比较多的情况下,Serializable 真的不如 Parcelable,虽然 Parcelable 用起来麻烦,但是在性能优化这块 Parcelable 还是做得比较好的,所以我的建议是,如果被序列化的对象里面的字段很少的情况下,我们可以根据自己的需求来,但是在对象的字段比较复杂的情况下,特别是字段是另一种类型的对象情况下,我们应该选用 Parcelable 来实现对象序列化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,649评论 0 11
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,788评论 0 10
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,416评论 1 14
  • 昨天 你高声告诉我 你爱我 我眉眼飞舞 嘴角上扬 于是昨天夜里的小道上 我们手挽着手 牵着牵着仿佛就走到了时间的尽...
    你这样一点都不酷阅读 258评论 0 0