热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA编程思想学习笔记5chap1315斗之气5段

1.String对象不可变,一旦发生字符变换或者变长度,一定是新建了一个Stringprivatefinalcharvalue[];ViewCode2.字符串+与+:唯二操作符重载

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


private final char value[];
View Code

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);
}
}
View Code


  • javap -c TestString得到:

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

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));
}
}
View Code

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



  •  加载:类加载器执行,并创建Class对象

  •  链接:验证字节码,为静态域分配存储空间

  •     初始化:如果具有基类,则对其初始化,执行静态初始化器和静态初始化块

 8.使用.class创建Class对象的引用时,不会进行初始化

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

10.RTTI表现形式



  •  传统的类型转化,如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();
}
}
View Code

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

13.泛型类、接口、方法


推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 站点用户可以在站点上注册,并且在注册期间可以提供名称.我希望此名称是有效名称,并且不包含任何HTML和其他时髦字符.strip_tags够吗?解决方法: ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
author-avatar
deniz2502915157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有