当前位置: 首页 > article >正文

java基础以及内存图

java基础

命名:

大驼峰:类名

小驼峰:变量名方法名等其他的

全部大写:常量名字..

// 单行注释

/**/ 多行注释

变量类型 变量名

一、基本类型(8个)

整数:byte-8bit short-16bit int 32-bit long-64bit

浮点数: float 32-bit double 64-bit

布尔型 :boolean -32bit true / false

字符型:char ------>符号----几何图形

运算

++i,先加再赋值

i++,先赋值再加

短路逻辑: && 与 || 或

按位与 (补码) & --------同1为1

按位或 |----同0为0

~ 取反

 ^ 异或 相异为1,相同为0

二、引用类型

字符串---引用类型

split----分割

indexOf----判断是不是子串,int类型,有返回第一次出现的下标,没有-1

substring----截取,左闭右开

变量

局部变量使用前先赋值

局部变量全局变量重名,局部变量会覆盖全局变量

final

修饰常量,常量名习惯全部大写

定义的时候必须要给初始值,被final修饰的只能赋值一次,不可以二次赋值

final修饰的引用类型不可以二次改变指向

final修饰的类不可以被继承

final修饰的方法不能被重写

final防止指令重排序,遏制流水线优化,保障多线程并发场景下的可见性

final通常和static一起用

java内存图

java程序在运行时,内存主要分为以下几个区域:(绿色为静态变量)

1.方法区:用于存储类的信息、静态变量、常量池等。字符串常量池就位于方法区中。

2.栈区:用于存储局部变量和方法调用的相关信息。

3.堆区:用于存储对象实例。new创建的对象都是在堆当中开辟空间

演示示例:

package come.java.basicClass;

public class Person {
	public int age;
	public int[] arr;
	public String name="张三";
	
	public static int height = 168;
	public static int[] brr = {7,8,9};
	public static String play ="足球";
	
	public void run() {
		System.out.println("run");
	}
	public static void eat() {
		System.out.println("ear");
	}
 }
	
package come.java.basicClass;

public class PersonTest {
	public int a =10;
	public static int b =10;
	
	public static void main(String[] args) {
		Person.eat();
		System.out.println(Person.play);
		
		Person aa = new Person();
		aa.run();
		aa.name="张三";
		System.out.println(aa.name);
		
		fly();
		System.out.println(b);
		
		PersonTest bb = new PersonTest();
		System.out.println(bb.a);
		bb.jump();
		
		
	}

	private void jump() {
		// TODO Auto-generated method stub
		
	}

	private static void fly() {
		// TODO Auto-generated method stub
		
	}
}

代码描述

Person 类:包含普通属性(age、arr、name)和静态属性(height、brr、play),还有普通方法(run)和静态方法(eat)。
test 类:包含普通属性(a)和静态属性(b),静态方法(fly)和普通方法(jump)

1.类加载阶段:

方法区:

加载Person类和test类的信息;

为Person类的静态属性分配内存并初始化:height=168,brr记录包含7,8,9的数组的地址,play记录足球的地址;

为test类分配内存并初始化:b=10;

2.main方法执行阶段:

①栈:

main入栈;

调用Person.eat(),方法入栈,执行完出栈;

new创建Person对象aa,栈中存储aa这个引用变量,在堆中开辟空间;

调用aa.run(),方法入栈,执行完出栈;

aa的name记录字符串常量池中的张三的地址;

fly()入栈,执行完出栈;

创建test对象bb,栈中存储bb这个引用变量,指向堆中new出来的对象;

调用test.jump(),入栈,执行完出栈

②堆:

创建Person对象aa,包含普通属性age,arr,name,run()

创建test对象bb,包含普通属性a,jump()


http://www.kler.cn/a/614925.html

相关文章:

  • React Router精通:轻松创建动态单页应用
  • Linux搭建NFS服务
  • 解决Trae AI Builder 模式出现“服务异常,请稍后重试”的问题
  • 2025年3月电子学会c++五级真题
  • 18-动规-子序列中的 k 种字母(中等)
  • 一些需要学习的C++库:CGAL和Eysshot
  • 数巅科技首发企业级 Multi-Agent 框架 AskBot —— 探索企业数据领域的 AGI 初级形态
  • 【蓝桥杯速成】| 15.完全背包
  • Layui实现table动态添加行,可删除、表格可编辑,小数校验
  • Android ViewModel学习总结(源码级理解)
  • python 如何打包成exe文件
  • 可拖动对象编辑器使用指南
  • 【Linux】了解基础指令(超详细)
  • Python3基础库入门(个人学习用)
  • Epoll 的本质与原理:高性能网络编程的基石
  • 调用 DeepSeek制作简单的电子宠物
  • 区块链技术在投票系统中的应用:安全、透明与去中心化
  • Linux CentOS 7 搭建我的世界服务器详细教程 (丐版 使用虚拟机搭建)
  • 横扫SQL面试——连续性登录问题
  • 【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页