IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java之JVM内存分类&static关键字&游离块&静态游离块&设计模式(单例模式)&final关键字知识点整理 -> 正文阅读

[Java知识库]Java之JVM内存分类&static关键字&游离块&静态游离块&设计模式(单例模式)&final关键字知识点整理

JVM内存分类

  1. 程序计数器内存:记录程序执行的行号,是和线程相关的,每当创建一个线程就会有一块程序计数器内存。
  2. 堆内存 :是用来存储new出来的对象。堆内存中的对象不是共享的,意味着每new一个对象就会创建一个新
    的对象,对象是没有大小限制的。垃圾回收器监测堆内存中的对象,如果对象没用了,垃圾回收器对其进行
    回收。
  3. JVM栈内存:JVM栈内存是一个先进先出的数据结构,每执行一个方法时,就会把方法的栈帧压入到JVM栈内
    存中,当执行完这个方法,就把栈帧从JVM栈内存中弹出。
  4. 本地方法栈内存:当Java程序调用其他语言的程序时,其他语言方法在执行时使用的是本地方法栈内存。
  5. 方法区 :把类加载到方法区内存中。
    解释 NullPointerException 空指针异常,当调用一个对象的方法或使用一个对象属性时,JVM会有一个指针
    指向这个对象,方法中的this就是这个对象,属性是哪个对象的。如果这个对象是null,就会抛出空指针异
    常。
    换句话,也就是调用了一个空引用的属性或方法,就会抛出空指针异常。

static关键字
static是静态的意思,staitc修饰属性、方法、内部类、游离块,静态的属性和方法是属于类的,而不是对象的;静态属性对象之间是共享的。
可以通过类名直接调用静态的属性和方法了,不建议使用对象调用了

语法要求:在静态的方法中不能使用非静态的属性和方法,以及this关键字,在非静态的方法中可以调用任何的属
性和方法

游离块的概念
在类中可以定义游离块

public class Person extends Animal{ 
//游离块(初始化块) 
{
 //当调用构造器时,在执行构造器中代码前先执行游离块 
 //当每个构造器都要初始化一下相同的代码,就可以写在游离块中 
 System.out.println("执行了Person的游离块"); }
 public Person(){ 
 System.out.println("执行了Person的构造器"); 
 }
 public static void method(){ 
 }
 public static void main(String[] args) {
 	 Person p1 = new Person();
 	  } }

游离块的执行顺序:先执行父类的游离块,再执行父类的构造器,再执行子类的游离块,再执行子类的构造器
静态游离块
就是在游离块前面加static修饰,静态游离块是在类被加载时执行的。静态游离块只执行一次

public class Person extends Animal{
	 static{ 
	 	System.out.println("执行了Person的静态游离块"); 
	 	}
	 	//游离块(初始化块) 
	 	{
	 	 //当调用构造器时,在执行构造器中代码前先执行游离块 
	 	 //当每个构造器都要初始化一下相同的代码,就可以写在游离块中 
	 	 System.out.println("执行了Person的游离块"); 
	 	 }
	 	 public Person(){ 
	 	 	System.out.println("执行了Person的构造器"); 
	 	 		}
	 	 public static void method(){
	 	  }
	 	 public static void main(String[] args) {
	 	 	 Person p1 = new Person(); 
	 	 	 Person p2 = new Person(); 
	 	 	 }
	 	 	 }

静态游离块的执行顺序:先执行父类静态游离块,再执行子类静态游离块,再执行父类的游离块,再执行父类的构
造器,再执行子类的游离块,再执行子类的构造器
通常把整个程序只执行一次的代码写在静态游离块中

设计模式
人们在工作或生活中为了解决某些特定的问题,总结的一套方式或方法。
单例设计模式:一个类只能创建出一个对象,应用场景:一些单开的窗口
饿汉写法

/* 1. 构造器私有化
 2. 定义一个静态属性创建一个对象 
 3. 定义一个静态方法返回这个对象 
 */ 
 public class SingleTon { 
 private static SingleTon st = new SingleTon(); 
 private SingleTon(){
  }
 public static SingleTon getInstance(){ 
 return st; 
 }
  }
public class Test { 
	public static void main(String[] args) { 
		SingleTon t1 = SingleTon.getInstance(); 
		SingleTon t2 = SingleTon.getInstance(); 
		System.out.println(t1==t2); }
		 }

懒汉写法

/* 1. 构造器私有化 
2. 定义一个静态属性 
3. 定义一个静态方法,如属性为null,则创建对象,返回这个对象 
 */
 public class SingleTon { 
 	private static SingleTon st ; 
 	private SingleTon(){
 	 }
 public static SingleTon getInstance(){
 	 if(st==null){ 
 	 	st = new SingleTon(); 
 	 	}
 	 	return st; 
 	 	} 
 	 	}

final关键字
可以修饰类、方法、局部变量和全局变量
final修饰类:不能被继承
final修饰的方法:不能被重写
final修饰的变量:不能被修改,基本类型变量的值不能修改,引用类型变量的地址不能修改,但可以改变引用对象
的属性。如果final修饰的是全局变量(属性),一定要对其进行初始化。

public class Test1 { 
	public void method(){ 
		final int i = 10; 
		i = 10; //错误 
		final Person p = new Person(); 
		p = null; //错误 
		p.name = "tom"; //正确 
		p.name = "jack"; //正确 
		} 
		}


public class Test1 {
 //直接在属性定义时初始化 
 //final String name = "tom"; 
 final String name; 
 //在每个构造器中初始化 
 /* public Test1(){
 	 name = "tom"; 
 	 }
 	public Test1(int i){ 
 		name = "jack"; 
 		}
 		*/ 
 		//在游离块中 初始化 
 		{
 		 name = "tom";
 		  } 
 		  }
 
public class Test1 { 
//在一个类中定义一个常量属性
	 public static final String IP = "192.168.1.10"; 
	 }
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:35:37  更:2022-03-21 20:39:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:40:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码