程序运行时的内存占用

代码区(code area) 存放代码

数据区(data area) 存放全局数据、静态数据

堆区(heap area) 存放动态申请的数据

栈区(stack area) 存放局部数据、参数

Static

  • 用static修饰的变量称为静态属性,又叫类变量
  • 用static修饰的方法称为静态方法,又叫类方法(静态方法里,无this)
  • 用来修饰初始化语句块,称为静态初始化语句块

类的静态属性和静态方法

  • 即使没有创建该类的具体对象,类中的static类成员也会存在,这时可以通过:

    类名.静态变量

    类名.静态方法

  • static方法中不能直接调用非static的域或方法(必须通过对象名引用)。

    static函数并不需要先产生任何对象,就可以通

    过类名来调用。

    non-static数据/函数和对象绑定

    在static函数中“直接”取用non-static数据/函数,会产生语法错误。

静态代码块

只能定义在类里,独立于任何方法,不能定义在方法里

里面的变量都是局部变量

会在类被加载时自动执行

一个类中允许定义多个静态代码块,执行顺序=定义顺序

只能访问类的静态成员,不允许访问实例成员(说实话这个我没太搞懂,我再学习一下然后会回来,把这里补一下我的大白话理解)

实例成员通俗理解

  • 在类里写的方法就是 成员方法
  • 在类里可以直接定义一些变量 成员变量(就是不是写在方法里的那些)

静态代码块与非静态代码块的异同点

  • 相同点:
  1. 都在JVM加载类时且在构造方法执行之前执行,在类中可定义多个
  2. 在代码块中对一些static变量进行赋值
  • 不同点:
  1. 静态代码块在非静态代码块之前执行

    静态代码块—>非静态代码块—>构造方法
  2. 静态代码块在第一次new执行一次,之后不再执行

    非静态代码块在每new一次就执行一次

通俗理解

  • 静态代码块就是项目启动的时候随着类就被加载了,可以随时随地调用了
  • 其他的没有加static的都是要调用的时候才会加载
  • 区别就是,加载的时间不一致

示例代码 代码地址

// package com.sun.xxx // 这个 是包名
public class Persion {
// 1.上面的那个Publuc控制是否其他的类可以调用这个类的方法属性
String name; // instance variable
String sex; // instance variable
int age; // instance variable
private static int count; // 类变量class variable 在全局分配内存 public static int getCount() { // 类方法 class method
return count;
} public Persion(String n, String s, int a) { // constructor
name = n;
sex = s;
age = a;
count++;
} public String toString() { // instance method
String s = "姓名:" + name + ", 性别:" + sex + ", 年龄:" + age;
return s;
}
}
public class TestPerson {
public static void main(String[] args) {
Persion p1 = new Persion("哇咔咔", "女", 1); // 这个代码调用了constructor的count++;
System.out.print("p1.getCount():" + p1.getCount() + "\n"); // 1
System.out.print("Persion.getCount():" + Persion.getCount() + "\n"); // 1
Persion p2 = new Persion("哇咔咔2", "女", 2);
System.out.print("p2.getCount():" + p2.getCount() + "\n"); // 2
System.out.print("Persion.getCount():" + Persion.getCount() + "\n"); // 2
Persion p3 = new Persion("哇咔咔3", "女", 3);
System.out.print("p3.getCount():" + p3.getCount() + "\n"); // 3
System.out.print("Persion.getCount():" + Persion.getCount() + "\n"); // 3
System.out.print("p3.getCount():" + p1.getCount() + "\n"); // 3
System.out.print("p3.getCount():" + p2.getCount() + "\n"); // 3
System.out.print("p3.getCount():" + p3.getCount() + "\n"); // 3
}
}

这是我作为一名前端,第一次学习JAVA,如果本文有错误,欢迎路过的小哥哥小姐姐们帮助我纠正错误哦~~

Java基础学习笔记-类的静态属性和静态方法--待继续补充的更多相关文章

  1. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  2. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  3. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  4. Java基础学习笔记(四)

    21.构造方法(续):分类: 隐式构造方法:如果在一个类中,没有手动编写构造方法,则系统会提供一个默认的无参的构造方法 显式构造方法:如果在一个类中,手动编写构造方法,则系统不会提供默认的无参的构造方 ...

  5. java基础学习笔记五(抽象类)

    java基础学习总结——抽象类 抽象类介绍

  6. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  7. Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal

    System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...

  8. Java基础学习笔记七 Java基础语法之继承和抽象类

    继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...

  9. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  10. Java基础学习笔记二十八 管家婆综合项目

    本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...

随机推荐

  1. git 多个commit 如何合并

    git 多个commit 如何合并 本篇主要介绍一下 git 中多个commit 如何合并, 因为commit 太多 会导致提交记录混乱, 所以有时候会把多个commit 合并成一个 保持提交记录干净 ...

  2. 从源码入手探究一个因useImperativeHandle引起的Bug

    今天本来正在工位上写着一段很普通的业务代码,将其简化后大致如下: function App(props: any) { // 父组件 const subRef = useRef<any>( ...

  3. 最全iOS 上架指南

    一.上架基本需求资料 1.苹果开发者账号(公司已有可以不用申请,需要开通开发者功能,每年 99 美元) 2.开发好的APP 二.证书 上架版本需要使用正式的证书 1.创建证书 Apple Develo ...

  4. zk系列二:zookeeper实战之分布式统一配置获取

    前面介绍了zk的一些基础知识,这篇文章主要介绍下如何在java环境下获取zk的配置信息:主要基于zk的监听器以及回调函数通过响应式编程的思想将核心代码糅合成一个工具类,几乎做到了拿来即用: 在分布式集 ...

  5. 3.JS

    1.简介 JavaScript 因为互联网而生,紧随着浏览器的出现而问世 1997年7月,ECMAScript 1.0发布. 1998年6月,ECMAScript 2.0版发布. 1999年12月,E ...

  6. MySQL InnooDB引擎之并发事务问题以及隔离级别的作用和区别

    最近在复习MySQL事务,但网上很多博客和资料可以说讲的不是模棱两可就是只有文字描述不够形象易懂,下面通过我的学习来详细讲一讲事务并发都会引起哪些问题?以及隔离级别是什么?InnoDB引擎是如何通过隔 ...

  7. 专业的C头文件设计和重构指南

    头文件设计要点: 1. 头文件注释 2. guard define 3. 尽量不要在头文件中暴露数据结构 4. 要自包含,保证头文件独立编译和功能正确 5. 函数声明前加XXX_API利于拓展 6.  ...

  8. Day18.2:对象创建的内存分析图解

    对象创建的内存分析 我们从两块最常用的内存空间对对象创建进行内存分析 堆内存:存放的是对象的具体信息:在程序之中堆内存空间的开辟是通过new完成的 栈内存:存放的是对象的地址信息,即通过地址找到堆内存 ...

  9. linux 挂载 vdi 文件(virtual box虚拟机镜像文件)

    1. 下载 vdfuse 下载地址 2.解压deb文件 解压deb安装包文件,这里不使用安装命令是因为你的virtualbox 可能和vdfuse的版本不一致,导致安装失败,而我们只需要用到 vdfu ...

  10. .NET 6 基于IDistributedCache实现Redis与MemoryCache的缓存帮助类

    本文通过IDistributedCache的接口方法,实现Redis与MemoryCache统一帮助类.只需要在配置文件中简单的配置一下,就可以实现Redis与MemoryCache的切换. 目录 I ...