[笔记]Java积累部分知识点目录1

目录

String StringBuilder StringBuffer对比
内部类和匿名内部类
抽象类的几个小问题
AssertionError的使用技巧
序列化
Serializable和Parceable对比
流的类型
注解
ThreadLocal
进程和线程
Java反射

String StringBuilder StringBuffer对比

String、StringBuilder和StringBuffer都可以存储和操作字符串
String会定义在常量池中,不方便进行编辑操作。
StringBuilder和StringBuffer都可以直接操作字符串对象,但是StringBuilder是单线程环境,没有Synchronized同步锁,不过效率比StringBuffer高。
在实际编码中,如果字符串编辑操作较少,可以用+进行连接,如果编辑操作较多,一般用StringBuffer,因为它支持多线程,是线程安全的,未来扩展容易。
Tips:string.intern()会得到对象在常量池中的引用。
java中String、StringBuffer、StringBuilder

内部类和匿名内部类

内部类就是在外部类里直接定义一个内部类
普通的内部类是一个语法糖,编译后会把外部类的实例对象作为参数,在构造函数中传给自己,所以内部类会持有外部类的引用。
静态内部类直接在方法区分配内存,不再持有外部类的引用,相应的也不能直接调用外部类,需要手动引用外部类的实例对象,为了避免内存泄露,一般用WeakReference去处理外部类的对象。
匿名内部类就是new一个抽象类或接口,然后直接在大括号里实现方法,然后调用,例如常见的thread写法

抽象类的几个小问题

1.抽象类是否可以没有方法和属性
一般来说抽象类总有方法和属性给子类去扩展或使用,但是如果没有方法和属性也可以,这样做一般是出于设计的角度,告诉用户这个类不能直接实例化,用户必须自己去实现一个它的子类。
2.abstrace和static能否共存
不能,static表示无需实例化即可调用,abstract则是必须覆盖实现,不能直接调用,冲突
3.abstract和native能否共存
不能,native本地方法表示一定有个实体来处理,abstract没有实体,不能处理
4.abstract和synchronized能否共存
不能,synchronized需要锁一个能直接调用的对象,abstract没有实体对象。

AssertionError的使用技巧

我们自己写代码框架时,有些函数是必须写,但是不希望别人调用的,比如静态工具类的构造函数,为了在调用者写代码时就给他提示错误,我们可以使用throw new AssertionError(),在构造函数里抛出异常。
这样就可以避免团队调用这个函数了。

序列化

序列化是处理对象流的机制,把对象转为流,这样在读写、传输、持久化时方便操作,且可以避免数据乱序等问题。

Serializable和Parceable对比

Android序列化有Serializable和Parceable两种接口,都能实现序列化
Serializable会把对象序列化为字节流,Parceable则是把对象分解为Intent能识别的基本类型;
Parceable效率更高更快(一般是10倍,1个数量级)
Serializable会产生大量变量,需要频繁GC
Serializable只是一种标识接口,无需实现方法(如果有不要序列化的字段,用transient修饰);Parceable中除了getter和setter之外,还需要自己写describeContents和writeToParcel方法把数据类转为Parcel,并实现一个Creator<T>实例对象,以实现createFromParcel把parcel转回数据类。
Serializable可以网络传输和持久化保存文件,Parceable则适用于进程间通信。
Parceable不像Serializable通用,适合在内存中保存,难以持久化。
Tips:序列化除了可以通过流传输和持久化之外,还可以用于深拷贝。

流的类型

对流的类型有三种划分维度:
按照传输方向,分为输入流和输出流
按照数据的单位,分为字节流和字符流,在java.io包里,byte字节流就是InputStream/OutputStream,文字字符流就是Reader和Writer。
按照功能,分为节点流和处理流,节点流是直接操作文件和网络的,直接读出或写入字节流;处理流是对已经存在的节点流或处理流进行处理的,包括缓冲流、转换流、数据流、对象流等。
缓冲流如BufferedInputStream提供带缓冲的读写
转换流只有InputStreamReader/OutputStreamWriter,用来套在InputStream/OutputStream外面,把字节流转为字符流
数据流如DataInputStream提供java的数据流读写功能
对象流是实现了Serializable的对象,可以转换为ObjectInputStream

三个维度是可以重合的,比如FileReader是输入流、字符流、节点流;BufferedOutputStream是输出流、字节流、处理流。

流常用两种设计模式:
1.装饰者模式对流进行扩展,比如先用FileOutputStream读文件,然后用BufferedOutputStream加缓冲,然后用DataOutputStream读出文件中的字节流。InputStream/OutputStream外面,把字节流转换为字符流。
2.适配器模式把字符流和字节流进行转换,就是转换流InputStreamReader/OutputStreamWriter。

java IO 流Stream 序列化Serializable 文件File

注解

为Java源程序中的元素关联任何信息或者任何元数据,可以反射获取注解对象和注解中的元数据。
注解不可以影响程序代码的执行,java解释器会忽略注解。
系统内置标准注解
Override Deprecated SurppressWarning
元注解
@Target 注解修饰的对象的范围 如ElementType.Field、Type
@Rentation 保留时间的长短,源代码\class文件\类加载运行时等 RentationPolicy.RUNTIME
@Documented 描述API 没有成员
@Inherited 可以被继承
Android support annotation
从android-19开始提供
1.Nulless注解 @NonNull @Nullable
2.ResourceType注解 @StringRes
3.Threading注解 @WorkerThread @UIThread 指定工作的线程
4.OverrideMethods注解 @CallSuper 调用父类的方法
注解的处理
编译器的插件来处理注解,注解的元数据放进class文件
提供程序之外的信息,帮助处理数据,不直接影响代码

ThreadLocal

ThreadLocal<T>是线程本地变量,仅使用线程自己的内存,这样可以在线程间隔离数据,不做线程间数据同步,就是说同一个ThreadLocal对象,在不同线程中操作,会分别提供互不干扰的内存。
ThreadLocal只有set、get、remove和initalValue四个函数。
ThreadLocal持有一个threadlocals对象,指向Thread的ThreadLocalMap,在ThreadLocalMap里key值为ThreadLocal对象,value值为T的具体值。一个Thread里可以有多个ThreadLocal对象。
所以,通过ThreadLocal取值,其实就是通过Thread里的Map去取值,所以仅与当前线程有关。
Java并发编程:深入剖析ThreadLocal

进程和线程

一个进程内存空间一般是2G,一个线程栈空间的大小一般是1M,这样算的话1个进程最多有2048个线程。
一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定,只要虚拟空间足够,那么新线程的建立就会成功。如果需要创建超过2K以上的线程,减小你线程栈的大小就可以实现了。

Java反射

Java 中的反射首先是能够获取到Java 中要反射类的字节码, 获取字节码有三种方法,
1.Class.forName(className)
2.类名.class
3.this.getClass()。
然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用

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

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,094评论 0 62
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,621评论 18 399
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 1,940评论 0 8
  • 在刚开始学习UI的时候,关于布局我们都是从SB开始学习.一般都也遵循从左往右,从上往下.但是遇到scrollVie...
    coder_Man阅读 840评论 0 1
  • 一千年前,我是一条红鲤鱼 我生活在你的庭院,你的水池 你每天在池水边,读书,梳妆, 我知道你的心思和情义 是你幽怜...
    利君理疗阅读 265评论 0 0