Java Object类的方法
本文整理一些Java开发中关于Object类型的方法的使用。 equals方法 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。 但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖 ...
It’s not what you know, it’s how you think
本文整理一些Java开发中关于Object类型的方法的使用。 equals方法 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。 但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖 ...
本文通过一个例子来解释两种锁机制:实现ABC循环打印3次“ABCABCABC”,要求使用3个线程,分别打印A/B/C,通过锁同步机制来控制流程 使用对象锁 synchronized锁的是括号里的对象 public class Main { private static Boolean flagA = true; private static Boolean flagB = false; private static Boolean flagC = false; public static void main(String[] args) { // 使用对象锁 final Object lock = new Object(); Runnable taskA = () -> { for(int i = 0; i < 3;) { synchronized (lock) { // 获取到了对 ...
ArrayList是最常用的随机访问动态数组,与C++的std::vector类似。 类型声明 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { // ... } public interface List<E> extends Collection<E> { // ... } public interface Collection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); boolean equals(Object o); int hashCode(); Object[] toArray(); <T> T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); void clear(); boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean removeIf(Predicate<? super E> filter); boolean retainAll(Collection<?> c); default Spliterator<E> spliterator() { return Spliterators.spliterator(this, 0); } default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); } default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); } } public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { ...
Spring是Java服务端主流的开发框架,其中的依赖注入和模块化,实现了一套灵活的组件化方案。 这个相当于Spring在框架层面帮我们做好了Bean对象的管理,而且还支持注解以及很多方法来支持非侵入式的组件化方案,使得代码耦合极低,就像没有关系的两个实现,因为Spring的粘合作用,神奇的配合一起工作,后面会从注解和方 ...
本文介绍一种基于Spring的通用的方法拦截方案,配合注解来轻量级的使用,方法拦截技术经常用于性能监控,统一日志等。 ProxyFactory 代理工厂提供了对象行为的扩展机制(addAdvice)可以在方法调用前后做一些事情。 // 接口和对象 interface UserReadService { String getUserId(String id); } class UserReadServiceImpl implements UserReadService { @Override public String getUserId(String id) { System.out.println(id); return id; } } // 用于拦截扩展的代理对象 class UserInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println("start"); Object obj = invocation.proceed(); ...
java注解常常用于自动化,简化代码开发成本,减少重复劳动,比如Spring框架使用了很多注解(如@Resource, @Service,@Component等),让组件化可以非常简单的实施,而且代码清晰简洁。 常用注解 标准注解 @Deprecated 添加到不鼓励使用的项上,当使用这种项时,编译器会发出警告 @Override 表示是覆盖父类的方法,如果父类没有相 ...
列表初始化的语法{ arg1, arg2, ... }非常直观,合理使用能简化代码以及增强可读性。 列表初始化的常用语法 直接列表初始化 语法 语义 T object { arg1, arg2, ... }; 对象构造 T { arg1, arg2, ... }; 临时对象构造 new T { arg1, arg2, ... } new构造对象 Class { T member { arg1, arg2, ... }; }; 成员直接初始化 Class::Class() : member{arg1, arg2, ...} {... 构造函数初始化列表 拷贝列表初始化 语法 语义 T object = {arg1, arg2, ...}; 对象初始化 function( { arg1, arg2, ... } ); 函数参数 return { ...
本文整理了下Java中常用的多线程相关的类型和使用方式。 线程类 Thread类型 public class Thread implements Runnable { public static native void sleep(long millis) throws InterruptedException; public Thread(Runnable target); public Thread(Runnable target, String name); public final void join() throws InterruptedException; } 例:继承Thread,覆盖Thread的run方法 class MyThread extends Thread { @Override public void run() { System.out.println("hello1"); } } MyThread mythd = new MyThread(); mythd.start(); Runnable接口 @FunctionalInterface public interface Runnable { public abstract void run(); } 例:实现Runnable接口,传递给Thread Thread thd = new ...
本文整理Java中常用的工具类,如StringUtils, Arrays, CollectionUtils等 StringUtils StringUtils是Apache Commons Lang3中的提供的操作String工具类。 maven引入 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> 常用方法 StringUtils支持对null的String对象操作,不会抛出异常 isEmpty / isBlank 检查字符串是否为空 trim / strip 去除首尾空 ...
本文整理下Java8引入的Stream流,能大大简化集合类的操作,同时引入了常用的filter, map, reduce等高阶函数的操作类型。 Stream有点类似C++库boost.Range的概念,是基于容器的迭代范围的一个视图,并能够给予视图做各种算法。 Stream的引入 先看一个例子: Integer [] ary = {1,2,3,4,5,6,7,8,9}; ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(ary)); al.stream() .filter( x -> x%2==1 ) .forEach(x -> System.out.println(x)); long ...
Java对象的序列化主要有两种用途: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 在网络上传送对象的字节序列。 序列化接口与API 在Java中,只要一个类实现了java.io.Serializable接口(没有方法),那么它就可以被序列化。 对象序列化步骤: 创建一个对象输出流ObjectOutputStream ...
之前介绍过GYP,它是Google早期用来维护chromium项目的meta-build system,GN则是用来替代GYP的工具,目前chromium及相关的开源项目都迁移到基于GN来管理。并且GN是基于C++编写,效率上比基于python的GYP快了近20倍。 环境准备 配置depot_tools (ninja) 参考:http:// ...
本文整理下Java8引入的最重要的函数式编程的特征 — lambda表达式,能让代码更加简单易懂。 Java中lambda表达式的关键特征: 是一个带参数的代码块,一般用于代码块的延后执行 可以转化为函数接口 能访问作用域内的不可变变量(final variables),这也是闭包的重要特征 支持函数引用和构造函数引用 接口支持实现默认 ...
嵌套类(nested class)是指定义在另一个类内部的类,嵌套类存在的目的应该只是为外围类提供服务。 嵌套类的分类: 内部类(inner class) 非静态成员类(nonstatic member class) 匿名类(anonymous class) 局部类(local class) 静态成员类(static member class) 内部类 非静态成员类 非静态成员类即成员内部类,当创建成员内部类时,会与外围 ...
Java在5.0开始支持范型,能做到更好的类型安全性和可读性,减少容器的元素类型与Object的强制转换。不过,与C++相比,Java的范型相对比较弱,因为范型类的不同类型参数并不会真正实例化出独立的类型,而是通过类型擦除的技术来实现范型。 范型基本用法 范型类 范型类基本形式:class ClassName<T,U> 一个简单的例子: class MyArray<E> { MyArray() { } public int size() ...