构造器

6.4 Java 8的日期、时间类

ぐ巨炮叔叔 提交于 2020-03-12 22:16:39
目录 一、Date类——java.util.Date 二、Calendar类 1、add和roll的区别 2、设置Calendar的容错性 3、set()方法延迟修改 三、Java 8新增的日期、时间包——java.time 一、Date类——java.util.Date Date对象既包含时间也包含日期,但是由于Date类从JDK1.0就开始存在了,所以它大部分方法和构造器都显示过时了,不推荐使用。 Date类提供了6个构造器,剩下2个构造器: (1)Date():生成一个代表当前日期时间的对象。该构造器在底层调用System.currentTimeMillis()获取long整数作为日期的参数。 (2)Date(long date):根据long型整数生成一个Date对象,该构造器的参数表示的Date对象与GMT 1970年1月1日00:00:00之间的时间差,以毫秒作为计时单位。 Date类未过时的方法: (1)boolean after(Date when):测试该日期在指定日期When之后 (2)boolean before(Date when):测试该日期在指定日期When之前 (3)long getTime():返回该时间对应的long型整数。以时间戳返回,单位为毫秒 (4)void setTime(long time):设置该对象的时间 import java

继承

与世无争的帅哥 提交于 2020-03-11 16:30:15
继承 使用 extends 关键字 对父类公共方法进行覆盖(重写) 1.方法的可见性(修饰符)向上兼容 2.方法的返回类型向下兼容(具有可协变性) 子类对象调用父类中被重写的方法 super . 方法名 在子类构造器中调用父类构造器 super(param1,param2,…)且必须为首句 若子类构造器没有显示调用父类构造器,将默认调用父类默认构造器(不带参数),若父类中没有不带参数构造器,编译器将报错 静态绑定:修饰词为private、static、final或者构造器的调用,编译器将会很容易找到并调用,这种调用方式称为静态绑定 动态绑定:调用方法依赖于隐式参数的类型,需要经过重载解析的过程(依据方法名在继承链上搜寻到所有符合的方法,并根据隐式参数的类型找到最为符合的方法) 来源: CSDN 作者: D_pfei 链接: https://blog.csdn.net/D_pfei/article/details/104793741

关于抽象类、抽象方法以及接口

谁都会走 提交于 2020-03-10 18:58:16
关于抽象类、抽象方法 abstract修饰 抽象类不能被实例化,抽象类里可以包含抽象方法也可以不包含;但有抽象方法的类必须是抽象类。 抽象类可以包含: 成员变量 方法(普通方法和抽象方法) 构造器(不是用来构造对象的,主要是给子类调用) 初始化块 内部类(接口、枚举) 含有抽象方法的类,包括: 直接定义了一个抽象方法; 或继承了一个抽象父类,但没有完全实现父类包含的抽象方法; 或实现了一个接口,但没有完全实现接口包含的方法 只能定义为抽象类。 利用抽象方法和抽象类的优势,可以更好地发挥多态的优势,使得程序更加灵活; abstract和final不能同时修饰同一个类或方法 当使用abstract修饰类时,表明这个类只能被继承; 当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。 而final修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstract不能同时使用。 abstract和static不能修饰同一个方法, 但它们可以同时修饰内部类。 abstract和private不能修饰同一个方法。 abstract不能修饰成员变量、局部变量,也不能修饰构造器。 使用模板模式的两种情形 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给子类去实现。 父类中可能包含需要调用其他方法的方法,这些被调方法既可以由父类实现

HashMap源码分析(jdk12)

房东的猫 提交于 2020-03-10 15:06:41
1. 初始化 ,hashMap初始化容量默认大小为16,默认负载因子为0.75F 一共有3个构造器 无参 带初始化容量 带初始化容量和初始化加载因子 前两个构造器都是调用第三个构造器。如果没有设置初始化容量或负载因子,以默认值创建。值得一提的是: 在调用构造器创建HashMap时不会立即创建容器,(在jdk1.8之后为 Node<K,V>[] table 用于存储键值对)。而是会在你第一次put元素的时候调用resize方法创建。 容器的大小必须为2的倍数。你在设置初始化容器大小时,如果输入的不是2的倍数,那会自动调整为最接近的大于输入值的2的倍数。主要在tableSizeFor这个方法实现。 该方法,先获取 输入数-1 的32位二进制前导零数目(这里-1理解一下就好了,不-1那对于恰好是2的倍数的,会扩大一倍)。-1无符号右移前导零数目位,这样就得到了最接近 输入数 的 2的倍数-1。最后判断n的大小, 如果n=-1表示cap=1,那就设置容量为1; 如果n>0,如果大于最大容量,那就设置为最大容量,否则设置为n+1。 hashMap有最大容量。2^30 链表长度阈值 当长度大于8时,会从链表转化为红黑树。至于为什么设置为8主要是理想状态下,设置合理的HashMap,根据泊松分布计算得到链表长度达到8的概率极低( 0.00000006)

this的用法

人走茶凉 提交于 2020-03-08 04:29:00
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。 package com.hxw.T2; public class ThisTester { private int i=0; //第一个构造器:有一个int型形参 ThisTester(int i){ this.i=i+1;//此时this表示引用成员变量i,而非函数参数i System.out.println("Int constructor i——this.i: "+i+"——"+this.i); System.out.println("i-1:"+(i-1)+" this.i+1:"+(this.i+1)); //从两个输出结果充分证明了i和this.i是不一样的! } // 第二个构造器:有一个String型形参 ThisTester(String s){ System.out.println("String constructor: "+s); } // 第三个构造器

java反射常用API小结

柔情痞子 提交于 2020-03-07 02:26:40
java反射API 前言 本篇博客不设计反射的原理及其过程,主要是教会大家使用java反射 常用的API ,能够在日常编码中使用到它。 相信我,这么多种类型总有一种会被用到 正文 测试实例 //一个用于本次反射的实例类 package demo ; /** * @version V1.0 * @Title: * @Package * @Description: * @author: 刘星星 * @date: 2020/3/5 20:23 */ public class ReflctResouce { // String 类型属性 public String name ; // int 类型属性 private anInt ; // 静态类型 public static Character character ; // 无参构造器方法 public ReflctResouce ( ) { } // 有参构造器方法 public ReflctResouce ( String name , int anInt ) { this . name = name ; this . anInt = anInt ; } // 具有返回值的方法 public String getName ( ) { return name ; } // 无返回值但是具有参数的方法 public void

设计模式学习(二)

懵懂的女人 提交于 2020-03-06 20:48:41
一、单例模式 单例模式分为以下8种: 饿汉式: 静态常量 静态代码块 懒汉式: 线程不安全 线程安全,同步方法 线程安全,同步代码块 双重检查 静态内部类 枚举 单例模式的使用场景: 需要频繁创建和销毁的对象;创建时耗时过多或消耗资源过多,但又经常用到的对象(比如session工厂、数据源等) (1)饿汉式 - 静态常量写法 代码实现: /** * 设计模式之单例模式 * 饿汉式(静态常量) * * @author song * @create 2020/3/4 15:08 */ public class SingletonTest01 { public static void main(String[] args) { Singleton instance1 = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println("两次获取的实例一样吗:" + (instance1 == instance2)); //true } } class Singleton { //私有构造方法,使其不可在外部通过构造器实例化 private Singleton() { } //定义为常量,保证实例对象不变 private final static Singleton

也说new

↘锁芯ラ 提交于 2020-03-06 07:46:41
也说new 今天看到了Anytao的 [你必须知道的.NET] 第五回:深入浅出关键字---把new说透 。Anytao这一系列文章写得都非常好,其实甚至正是我一直想写的。比起各种应用层面上的技巧,我更喜欢研究.NET的底层机制。但是光顾了自己研究了,也没好好写东西给大家分享。 《把new说透》这篇文章介绍的内容不错,但Anytao文字上可能没有表达得很清晰。C# 2.0中关键字new有三种作用——1)作为修饰符覆盖父类中的virtual成员,2)作为运算符创建对象,3)作为泛型类型中对类型形参的约束。 new的这三种功能其实是完全不相干的,Anders Liu个人感觉作为文章来说,应该完全分开在不同的小节中去介绍。 1 new修饰符 new修饰符用于修饰类型成员(属性、方法等)。 (懒得画图写代码了,所以采用纯文字描述。大家可以看Anytao的代码) 当父类中编写了virtual方法时,子类出现了 相同签名 的方法时,必须冠以override或new运算符。 如果使用override运算符,则可以实现“多态”。即:将子类对象转成父类型后,调用virtual方法,实际上执行的是 子类 中的方法代码。 而如果使用new运算符,则不会出现上述情况,将子类对象转成父类型后,调用virtual方法,实际上执行的是还是 父类 中的方法代码。 2 new运算符 new运算符用于创建对象

reflect 反射

丶灬走出姿态 提交于 2020-03-05 21:45:26
1:任何对象的创建依赖于字节码 2:运行状态中,对于任意一个类(class文件),都能直到其中的所有属性与方法。 对于任意一个对象,都能够调用它的方法和属性; 这样的动态获取信息以及动态调用对象的方法的功能成为java语言的反射 3:应用程序,独立运行。。对外提供接口是为了扩展(不能修改源代码的时候,使用代理方式)。 拿到对外暴漏的接口名(通过配置文件),然后通过反射获取类里面的信息。 拿到类名称,可以找到类文件,获得字节码文件 4:类,属性,方法,构造器准备    public class Cat { private String color; public double weight; public String eat(String food) { System.out.println("今晚cat吃了:" + food); return food; } private void sleep(Integer num, String color) { System.out.println(num + "个颜色是" + color + "的猫猫在睡觉"); } public Cat() { } private Cat(String color, double weight) { this.color = color; this.weight = weight; }

Vue 注册组件

陌路散爱 提交于 2020-03-05 18:51:26
注册组件 注册组件的基本步骤 组件的使用分成三个步骤: 创建组件构造器:调用Vue.extend()方法 注册组件:调用Vue.component()方法 使用组件:在Vue实例的作用范围内 我们来看看通过代码如何注册组件 <div id="app"> <!--3.使用组件--> <my-cpn></my-cpn> <script src="../js/vue.js"></script> <script> // 1.创建组件构造器对象 const cpnC = Vue.extend({ template: ` <div> <h2>我是标题</h2> <p>我是内容, 哈哈哈哈</p> <p>我是内容, 呵呵呵呵</p> </div>` }) // 2.注册组件 Vue.component('my-cpn', cpnC) const app = new Vue({ el: '#app', data: { message: '你好啊' } }) </script> 查看运行结果: 和直接使用一个div看起来并没有什么区别。 但是我们可以设想,如果很多地方都要显示这样的信息,我们是不是就可以直接使用 <my-cpn></my-cpn> 来完成呢? 注册组件步骤解析 Vue.extend(): 调用Vue.extend()创建的是一个组件构造器。 通常在创建组件构造器时