分类:Java

JAVA不可变类(immutable)机制与String的不可变性

JAVA不可变类(immutable)机制与String的不可变性
一、简介 不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如Interger、Long和String等。可变类相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。 二、优点 线程安全:不可变对象是线程安全的,在线程之间可以相互共享,不需要利用特殊机制来保证同步问题。 易于构造和使用。 三、设计方法 类添加final:只要继承类覆盖父类的方法并且...

5年前 (2019-03-20) 1149℃ 1喜欢

《JAVA设计模式》——单例模式及其七种写法

《JAVA设计模式》——单例模式及其七种写法
概述 大家都知道,在windows系统里只能打开一个“任务管理器”。同理,在程序开发中,需要某些类只能创建一个对象,因为随意创建这些类的对象没有任何意义,甚至造成系统性能下降(因为频繁地创建对象、回收对象带来的系统开销问题)。这时用到了一种常用的软件设计模式“单例模式”,通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。通常单例模式在Java语言中,有两种构建方式: 懒汉方式。指全局的...

5年前 (2019-03-20) 1131℃ 0喜欢

JAVA的堆栈、堆、方法区、常量池

JAVA的堆栈、堆、方法区、常量池
Java 虚拟机JVM将运行时内存区域划分为五个部分:方法区、堆、PC 寄存器、Java 方法栈和本地方法栈。 堆区(heap): 提供所有类实例和数组对象存储区域 jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区(stack): 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 每个栈中的数...

5年前 (2019-03-11) 1381℃ 0喜欢

JAVA类与类之间的全部关系简述+代码案例

JAVA类与类之间的全部关系简述+代码案例
类和类之间关系包括了 is a,has a, use a三种关系 (1)is a包括了 继承,实现关系 (2)has a包括了 组合,聚合,关联关系 (3)use a包括了 依赖关系 1.继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UM...

5年前 (2019-02-14) 1129℃ 3喜欢

Eclipse中的常见设置、快捷键

Eclipse中的常见设置、快捷键
1. 切换java透视图 第一打开eclipse,默认是java ee工作透视图,需要切换为java透视图。在右上角open perspective按钮 –> Java –> OK。 2. 设置编码格式为UTF-8 Windows -> Preferences -> General -> Workspace –> Text f...

5年前 (2019-01-23) 1014℃ 0喜欢

Java中父类构造器访问子类对象的实例变量

Java中父类构造器访问子类对象的实例变量
子类的方法可以访问父类的实例变量,这是因为子类继承父类就会获得父类的成员变量和方法;但父类的方法不能访问子类的实例变量,因为父类根本无从知道它将被哪个子类继承,它的子类将会增加怎样的成员变量。 但是,在极端的情况下,可能出现父类访问子类变量的情况。请看下面的示例程序。 class Base { //定义一个名为i的实例变量 private int i = 2;...

6年前 (2018-11-02) 1303℃ 0喜欢

Java中父类构造器的隐式调用和显式调用

Java中父类构造器的隐式调用和显式调用
当创建任何 Java 对象时,程序总会先依次调用每个父类非静态初始化块、父类构造器(总是从 Object 开始,因为Java 程序里所有类的最终父类都是 java.lang.Object 类)执行初始化,最后才调用本类的非静态初始化块、构造器执行初始化。 当调用某个类的构造器来创建Java 对象时,系统总会先调用父类的非静态初始化块进行初始化。这个调用是隐式执行的,而且父类的静态初始化块总是会被执...

6年前 (2018-11-02) 1576℃ 0喜欢

Java中类变量的初始化时机

Java中类变量的初始化时机
类变量属于Java类本身,只有当程序初始化该Java 类时才会为该类的类变量分配内存空间,并执行初始化。 从程序运行的角度来看,每 JVM对一个 Java 类只初始化一次,因此 Java 程序每运行一次,系统只为类变量分配一次内存空间,执行一次初始化。 从语法角度来看,程序可以在2个地方对类变量执行初始化: 定义类变量时指定初始值; 静态初始化块中对类变量指定初始值。 这两种方式的执行顺序与它...

6年前 (2018-11-02) 1501℃ 0喜欢

Java中实例变量的初始化时机

Java中实例变量的初始化时机
对于实例变量而言,它属于Java 对象本身,每次程序创建Java 对象时都需要为实例变量分配内存空间,并执行初始化。从程序运行的角度来看,每次创建Java 对象都会为实例变量分配内存空间,并对实例变量执行初始化。从语法角度来看,程序可以在3个地方对实例变量执行初始化: 定义实例变量时指定初始值; 非静态初始化块中对实例变量指定初始值; 构造器中对实例变量指定初始值。 其中第1、2种方式(定义时...

6年前 (2018-11-02) 1216℃ 0喜欢

Java中的实例变量和类变量易混点(2)

Java中的实例变量和类变量易混点(2)
使用static 修饰的成员变量是类变量,属于该类本身;没有使用static 修饰的成员变量是实例变量,属于该类的实例。在同一个 JVM内,每个类只对应一个Class对象,但每个类可以创建多个Java对象。 由于同一个JVM内每个类只对应一个Class对象,因此同一个JVM内的一个类的类变量只需一块内存空间;但对于实例变量而言,该类每创建一次实例,就需要为实例变量分配一块内存空间。也就是说,程序中...

6年前 (2018-11-01) 1088℃ 0喜欢