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

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.dtcms.com/a/98458.html

相关文章:

  • presto任务优化参数
  • RAG、大模型与智能体的关系
  • Binlog、Redo log、Undo log的区别
  • 【从零实现Json-Rpc框架】- 项目实现 - Dispatcher模块实现篇
  • Eigen 3
  • Jenkins 持续集成:Linux 系统 两台机器互相免密登录
  • 27_promise
  • 基于Selenium的IEEE Xplore论文数据爬取实战指南
  • 通信协议之串口
  • Java面试黄金宝典22
  • 【Basys3】外设-灯和数码管
  • 使用ANTLR4解析Yaml,JSON和Latex
  • SpringSecurity配置(自定义退出登录)
  • CubeMx——串口与 printf 打印
  • Python每日一题(9)
  • MyBatis的第一天笔记
  • 标书工具私有部署技术方案
  • springmvc redirect 使用https后跳转到了http://域名:443问题处理
  • 梯度裁剪(Gradient Clipping)
  • 【商城实战(97)】ELK日志管理系统的全面应用
  • 大模型最新面试题系列:微调篇之微调框架(三)
  • MySQL 常见面试问题总结
  • web3包含哪些关键技术栈,一些成功使用场景的分享
  • [FGPA基础学习]分秒计数器的制作
  • flutter 专题 七十 Flutter应用开发之webview_flutter插件
  • C盘清理技巧分享:PE Dism++ 空间清理篇
  • Vue学习笔记集--watch
  • 【SQL】MySQL基础2——视图,存储过程,游标,约束,触发器
  • 关于音频采样率,比特,时间轴的理解
  • ai 项目练习(一)