object

单例模式

若如初见. 提交于 2020-01-29 04:30:41
(一)、单例模式 设计模式:基于类做的一些设计,以此来实现数据封装的管理 单例模式:最常见的一种设计模式,经常被考到(单例模式:一个类只能生成一个实例) #单例模式的本质:做实例化的时候,判断有没有类变量_instance, 如果没有,生成一个Singleton的父类对象object的实例,赋值给_instance(只会做一次),返回cls._instance 如果有这个_instance类变量,直接返回cls._instance (或者本质这样理解:通过__new__的if判断逻辑,判断是否生成过实例地址,如果没生成,生成一个,生成了呢?就用老的那个地址。) class Singleton(object): def __init__(self): self.c=1000 def __new__(cls, *args, **kw): #规定,__new__必须返回一个实例(当前类的实例或者父类的实例) #如果cls这个类没有类变量_instance,则会执行if下的代码 if not hasattr(cls, '_instance'): orig = super(Singleton, cls) #找到父类的类对象object,也可以写成orig = super() cls._instance = orig.__new__(cls, *args, **kw) #可以写成不带参数

方法的直接调用,反射调用与……Lambda表达式调用

谁都会走 提交于 2020-01-29 02:48:03
想调用一个方法很容易,直接代码调用就行,这人人都会。其次呢,还可以使用反射。不过通过反射调用的性能会远远低于直接调用——至少从绝对时间上来看的确是这样。虽然这是个众所周知的现象,我们还是来写个程序来验证一下。比如我们现在新建一个Console应用程序,编写一个最简单的Call方法。 class Program { static void Main(string[] args) { } public void Call(object o1, object o2, object o3) { } } Call方法接受三个object参数却没有任何实现,这样我们就可以让测试专注于方法调用,而并非方法实现本身。于是我们开始编写测试代码,比较一下方法的直接调用与反射调用的性能差距: static void Main(string[] args) { int times = 1000000; Program program = new Program(); object[] parameters = new object[] { new object(), new object(), new object() }; program.Call(null, null, null); // force JIT-compile Stopwatch watch1 = new Stopwatch();

J.U.C--1.概述

烈酒焚心 提交于 2020-01-29 01:35:23
一开始看J.U.C的时候,应为AQS很出名,所以就一头扎进AQS里面,但是总是觉得云里雾里的,再加上AQS的代码风格确实不太友好,所有总是感觉收获很少。后来改变了思路,尝试从整体上把握,感觉效果好了很多,而且发现其实JDK的注释里面解释了很多内容。 为什么要有J.U.C? 因为一开始 synchronized 内置锁没有优化,将所有的并发问题都当作 竞争 处理的,但是很多时候,并发只是线程间的 交替 ,而这种情况下是不需要映射到操作系统的线程阻塞的。J.U.C最初的目的就是针对上述的问题进行优化,并且顺势做了一些功能的扩展。 J.U.C的主要内容 看一下J.U.C的内容,可以发现其实J.U.C主要包含以下几个部分: 原子类 锁 线程池 并发集合 并发工具类 J.U.C的锁的整体设计思路 在内置锁中,我们通过 synchronized 声明配合 Object 的监视器 monitor 来实现同步管理,在 Object 类中有着相应的同步处理方法,比如 wait(),notify() 之类的。而J.U.C中锁的设计理念就是用 Lock 配合 Condition 代替原来的组合 Condition又是什么鬼 在内置锁中,我们要做同步管理的时候,可以调用 monitor 的同步处理方法,也就是之前提到的 wait() 之类的,那么在J.U.C的机制里面,很自然会想到应该用 Lock

微信小程序中使用 async 和 await

北城余情 提交于 2020-01-29 01:28:54
在⼩程序的开发⼯具中,勾选 es6转es5语法 下载 facebook的regenerator库中的 regenerator/packages/regenerator-runtime/runtime.js 在⼩程序⽬录下新建⽂件夹 lib/runtime/runtime.js ,将代码拷⻉进去 在每⼀个需要使⽤async语法的⻚⾯js⽂件中,都引⼊(不能全局引⼊) 引入方式 : import regeneratorRuntime from '…/…/lib/runtime/runtime’ runtime.js 文件中需要拷贝的代码如下:(或者自己到github上去拷贝也可以,github连接地址在第二步上已给出) /** Copyright © 2014-present, Facebook, Inc. This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree. */ var regeneratorRuntime = (function (exports) { “use strict”; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty;

day2

 ̄綄美尐妖づ 提交于 2020-01-28 23:57:21
1 . java的内存泄漏 ,指一个不再被程序使用的对象或变量一直占据在内存中,并且不能被GC回收(该释放的对象没有被释放)。 常见情况:(1)各种连接并没有调用关闭方法(例如数据库的连接),使用监听器,释放对象时,忘记删除监听器。 (2)长生命周期对象持有短生命周期的引用。例如: public class Test(){ Object object; public void method(){ object=new Object(); } } object容易产生内存泄漏,调用method方法,不能释放object对象,解决方法一:将object当做局部对象,放入method方法中。解决方法二:在method方法中,最后一行加入如下代码:object=null; (3)静态集合类的引用(HashMap、Vector的引用) static Vector v=new Vector(5); for(int i=0;i<5;i++){ Object object=new Object(); v.add(object); object=null; } 静态成员变量v的存在周期跟程序运行时间一致,object不能被释放,因为它一直被vector引用着,仅仅释放Object也无用(object=null),因为一直调用v.add(object),GC机制不能回收

SpringDataJPA 中的复杂查询

做~自己de王妃 提交于 2020-01-28 23:06:57
基于首次在 EJB2.0 中引入的 EJB 查询语言(EJB QL),Java 持久化查询语言(JPQL)是一种可移 植的查询语言,旨在以面向对象表达式语言的表达式,将 SQL 语法和简单查询语义绑定在一起·使 用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的 SQL。 其特征与原生 SQL 语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。 实体类 @Data @Entity //声明实体类 @Table ( name = "cst_customer" ) //建立实体类和表的映射关系 public class Customer { @Id //声明当前私有属性为主键 @GeneratedValue ( strategy = GenerationType . IDENTITY ) //配置主键的生成策略 @Column ( name = "cust_id" ) //指定和表中 cust_id 字段的映射关系 private Long custId ; @Column ( name = "cust_name" ) //指定和表中 cust_name 字段的映射关系 private String custName ; @Column ( name = "cust_source" ) //指定和表中 cust_source 字段的映射关系

java反射

╄→尐↘猪︶ㄣ 提交于 2020-01-28 20:46:06
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 以上的总结就是什么是反射 反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。 (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 如图是类的正常加载过程:反射的原理在与class对象。 熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。 其中这个Class对象很特殊。我们先了解一下这个Class类 二、查看Class类在java中的api详解(1.7的API) 如何阅读java中的api详见java基础之——String字符串处理 Class 类的实例表示正在运行的 Java 应用程序中的类和接口

7. lang包介绍 (番队1主要成员介绍)

别等时光非礼了梦想. 提交于 2020-01-28 13:54:22
图源:https://blog.csdn.net/weixin_43915808/article/details/91474659 java 的核心包 lang 包,在 java 的 “护庭十三队” 里属于第一队。 介绍一下它的成员: Object 类 第一队队长, Object ,其身份不言而喻。 Object 是所有类的超类, Object类中定义了一些有用的方法, 这些方法在其他类中都存在 ,一般通过重载或者重写覆盖,实现给子类的具体功能。 equals : 返回值为boolean ,比较两个对象是否相同 hashCode : 返回值 int ,返回对象的哈希码值。 toString : 返回值类型 String ,返回对象的字符串表示形式。 包装类 一队成员, 负责装箱、拆箱,类型转换等日常任务。 自动装箱:自动将基本数据类型转换成包装类 Integer i = 1; 自动拆箱: 自动将包装类转成基本数据类型,如 Integer i = 2; int n = i; 为什么要有包装类? 我们知道 Java 是一个面向对象的编程语言,基本类型不具有对象的性质,为了让基本类型也是对象的特征,就出现了包装类型,它的作用: 将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。 包装类和基本数据类型的区别 声明方式不同: 基本类型不是用

并发编程之Unsafe魔术类的魔术

╄→尐↘猪︶ㄣ 提交于 2020-01-28 12:36:50
unsafe这个类是Jdk中底层的一个类,主要可以用于操作底层的内存,cas,数组,对象,内存操作,等一些可以跨过JVM底层操作。也就是因为能够对内存操作,自然就会引发一些不安全问题。所有叫做unsafe。 unsafe是不能new的因为它的构造函数是私有的,另外如果要使用getUnsafe()这个方法,就必须要保证类加载器是启动类加载器, private Unsafe ( ) { } @CallerSensitive public static Unsafe getUnsafe ( ) { Class var0 = Reflection . getCallerClass ( ) ; if ( ! VM . isSystemDomainLoader ( var0 . getClassLoader ( ) ) ) { throw new SecurityException ( "Unsafe" ) ; } else { return theUnsafe ; } } 还有获取unsafe这个类的实例的方法是通过反射; public static Unsafe reflectGetUnsafe ( ) { try { Field field = Unsafe . class . getDeclaredField ( "theUnsafe" ) ; field .

Dart语言学习(八) dynamic

纵然是瞬间 提交于 2020-01-28 12:36:34
dynamic 表示是动态的,数据类型是指任意类型 var a; a = 10; a = "Dart"; print(a); dynamic b = 20; b = "JavaScript"; print(b); print(b.runtimeType); var list = new List<dynamic>(); list.add(1); list.add("hello"); list.add(true); print(list); print("\n"); dynamic x ='hal'; print(x.runtimeType);//数据类型 print(x); x = 123; print(x.runtimeType); print(x); var a1 = 'var'; print(a1.runtimeType); print(a1); // Object Object o1 ='111'; print(o1.runtimeType); print(o1); o1.toString(); print(o1); 输出: Dart JavaScript String [1, hello, true] String hal int 123 String var String 111 111 dynamic、var、object 三种类型的区别dynamic:所有dart