JAVA编程思想学习笔记5-chap13-15-斗之气5段
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段的更多相关文章
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想学习笔记——类型信息
前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...
- Java编程思想学习笔记——注解
前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn ...
- Java编程思想学习笔记——枚举类型
前言 关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 正文 基本enum特性 调用enum的values()方法可以遍历enum实例,value ...
- Java编程思想 学习笔记1
一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
- Java编程思想 学习笔记11
十一.持有对象 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...
- Java编程思想 学习笔记12
十二.通过异常处理错误 Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
- Java编程思想 学习笔记7
七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...
随机推荐
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- Lua 变量名词
UpValue Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数.假设函数 ...
- LeetCode 509 Fibonacci Number 解题报告
题目要求 The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, su ...
- 2018/05/02 PHP 之错误与异常处理
在学习中,越学习越觉得自己基础薄弱. 在平常工作中,对于某些错误处理感觉不知道怎么下手,于是决定重新再整理一下. 强烈推荐这篇文章,真的感觉学习到了很多. 部分引用::再谈PHP错误与异常处理 -- ...
- NPM升级
nmp的更新可以使用自身指令即可: npm install npm -g 可以看到从3.10.10升级到了4.0.5 都说npm比node升级的快,现在比起来nodejs的更新速度更快 如果npm官方 ...
- 20165336 2017-2018-2《Java程序设计》课程总结
每周作业链接汇总 我期望的师生关系:对师生关系的看法 学习基础和C语言基础调查:关于学JAVA与C的调查 Linux安装及学习:Linux的安装 第一周学习总结:认识学习JAVA 第二周学习总结:JA ...
- jquery中选取兄弟节点的方法
$('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...
- python练习题-day2
1.判断下列逻辑语句的True,False 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 True ...
- linux 查看磁盘读写:iotop
iotop命令用来动态地查看磁盘IO情况,用法如下: 安装iotop命令 [root@mysql ~]# yum install iotop -y [root@mysql ~]# iotop Tota ...
- wamp设置本地访问路径为a.com
我们在用wamp进行本地建站时经常会碰到页面样式无法正常加载,这是因为没有正确加载css路径,那我们就用wamp设置本地访问路径为a.com指向本地的一个虚拟空间,如何操作呢?下面就跟随ytkah一起 ...