1.String对象不可变,一旦发生字符变换或者变长度,一定是新建了一个String

private final char value[];

2.字符串+与+=:唯二操作符重载

  • "aaa" + "bbb" + "ccc"执行过程会创建StringBuilder对象
public class TestString {
public static void main(String[] args) {
String str = "aaa";
String s = "bbb" + str + "ccc" + "ddd";
System.out.println(s);
}
}
  • javap -c TestString得到:

3.注意StringBuilder对象在toString():避免循环内多次创建StringBuilder引起低效率问题

4.String.split(String regex):通过正则表达式分割 String.replaceFirst() String.replaceAll(String regex, String obj)

5.正则表达式

6.java.util.regex   Pattern与Matcher

  • Pattern编译正则表达式
  • Matcher匹配正则表达式
    public static void main(String[] args ) {
Pattern p1 = Pattern.compile("!");
print(Arrays.toString(p1.split("abc!def!fgh!")));
Pattern p = Pattern.compile("abc+");
Matcher m = p.matcher("abcabcabccacbb");
while(m.find()) {
print("match:" + m.group() + "at" + m.start() + "to" + (m.end() - 1));
}
m.reset("abcefg");
while(m.find()) {
print("match:" + m.group() + "at" + m.start() + "to" + (m.end() - 1));
}
}

7.使用一个类需要完成三步

  •  加载:类加载器执行,并创建Class对象
  •  链接:验证字节码,为静态域分配存储空间
  • 初始化:如果具有基类,则对其初始化,执行静态初始化器和静态初始化块

8.获取Class对象的方式

  • Class.forName("类名")
  • 对象.getClass()
  • 类.class:使用.class创建Class对象的引用时,不会进行初始化
  • 包装器.Type

9.类存在继承关系,不代表其Class对象同样具备继承关系 

10.RTTI表现形式

  •  传统的类型转化,如Shape从List<Shape>拿出时会从Object转回Shape
  •  代表对象类型的Class对象:可用于反射机制
  •  instanceof(Class.isInstance()):运行时类型判断

11.动态代理

package com.chengjie;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; interface Subject {
void service();
} class RealSubject implements Subject{
@Override
public void service() {
System.out.println("RealSubject service!");
}
} public class DynamicProxyImpl implements InvocationHandler {
//
private Subject sub; public DynamicProxyImpl(Subject sub) {
this.sub = sub;
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(sub, args);
} public static void main(String[] args) {
//创建被代理对象
Subject subject = new RealSubject(); //注册进动态代理中
DynamicProxyImpl dpl = new DynamicProxyImpl(subject); //创建代理对象
Subject proxy = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[] {Subject.class}, dpl);
proxy.service();
}
}

12.通过RTTI(如instance)可能会增加代码耦合度,可以通过将实现设置为包访问权限实现隐藏,但是通过反射依旧可以调用私有方法

13.泛型类、接口、方法

14.通配符:List<? extends Shape>表示具有任何从Shape继承的类型的列表,这里谈论的是存储类型的关系,非List得关系

JAVA编程思想学习笔记5-chap13-15-斗之气5段的更多相关文章

  1. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  2. Java编程思想学习笔记——类型信息

    前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...

  3. Java编程思想学习笔记——注解

    前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn ...

  4. Java编程思想学习笔记——枚举类型

    前言 关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 正文 基本enum特性 调用enum的values()方法可以遍历enum实例,value ...

  5. Java编程思想 学习笔记1

    一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...

  6. [Java编程思想-学习笔记]第1章 对象导论

    1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...

  7. Java编程思想 学习笔记11

    十一.持有对象  通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...

  8. Java编程思想 学习笔记12

    十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...

  9. Java编程思想 学习笔记10

    十.内部类  可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...

  10. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

随机推荐

  1. .NET Core开发日志——Filter

    ASP.NET Core MVC中的Filter作用是在请求处理管道的某些阶段之前或之后可以运行特定的代码. Filter特性在之前的ASP.NET MVC中已经出现,但过去只有Authorizati ...

  2. window10装机 nvem简介,针对于 联想R720系列

    1.nvem格式的硬盘比较新,传统的老毛桃,大白菜,并不能有效使用. 2.对于镜像类 goust类,仍然具备 硬盘兼容性差(对于gpt,MAR,uefi并不够智能)成功率极低,容易丢失一些关键文件,造 ...

  3. babel-preset-env使用介绍

    声明:文章转自https://www.cnblogs.com/ye-hcj/p/7070084.html 本文介绍一个babel转码神器babel-preset-env 简介 现如今不同的浏览器和平台 ...

  4. coreseek搜索

    参考文档地址:http://github.tiankonguse.com/doc/sphinx/

  5. [skill] 异或

    都怪学习不好,或者老师教的不好.虽然知道异或的算法,但是始终不明白,到底有什么意义...直到今天,终于明白了. 还是应该怪我学的不好,不能怪老师. 今天有一个应用场景,写一个函数.这是一个hash表的 ...

  6. 请教神牛_字符串hash

    针对字符串hash 我早就听闻可以暴力的干一些事情. 比如 可以... 很多很多 实现O(n)求出 模式串在文本串出现的次数. 但是我不会这什么hash. 我会自然溢出字符串hash 嘿嘿 unsig ...

  7. 搭建Kubernetes服务集群遇到的问题

    kube-proxy问题: Apr 12 09:42:49 compute1 kube-proxy[12965]: E0412 09:42:49.602342 12965 reflector.go:2 ...

  8. Django+Celery 执行异步任务和定时任务

    celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...

  9. 用promise和async/await分别实现红绿灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. js字符串方法汇总

    1.length方法 var stringObject=new String("hellow world"); console.log(stringObject.length);/ ...