程序运行时的内存占用

代码区(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. 二、python基本数据类型

    一. 字面量 代码中,被写在代码中的固定的值,称之为字面量 Python常用6种值(数据)类型 字符串(string) :又称文本,是由任意数量的字符如中文.英文.各类符号.数字等组成.所以叫做字符的 ...

  2. 如何在.NET程序崩溃时自动创建Dump?

    今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示: 首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出.现场已经无法使 ...

  3. pip 国内源 包管理

    配置国内源 linux配置 修改 ~/.pip/pip.conf 文件,如下,添加了源并修改了默认超时时间 [global] timeout = 3000 index-url = http://mir ...

  4. c#winfrom通讯录管理系统

    一个简单的通讯录管理系统,适合毕业设计. 主要实现以下功能 1.系统登录 2.增加联系人 3.修改和删除联系人 4.查找联系人 5.系统用户管理 首先先搭建数据库. 我这边使用的版本是sqlserve ...

  5. 图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用

    1.ERNIESage运行实例介绍(1.8x版本) 本项目原链接:https://aistudio.baidu.com/aistudio/projectdetail/5097085?contribut ...

  6. 关于 Windows6.1-KB2999226-x64.msu 此更新不适用你的计算机解决办法

    前言 今天被这个破问题坑了很长时间,网上一大堆扯跳过那个检查,通过提取 cab 文件然后直接用命令安装,我可以明确的告诉你不是那样的解决的,因为我实际用命令装过也装不上(这里我吐槽一下,我猜你最初的问 ...

  7. orcl between and 时间

    在网上查阅,大家都说between and两边都会包含,但是对于时期来讲,他会包含前者,不会包含后者. 也就是说求一个时间介于上周六到本周五的区间,用between and 需要计算出上周六的时间和本 ...

  8. Kubernetes(K8S) 配置管理-ConfigMap 介绍

    作用:存储不加密数据到 etcd,让 Pod 以变量或者 Volume 挂载到容器中 场景:配置文件 创建配置文件 redis.properties redis.host=127.0.0.1 redi ...

  9. 【数据库】pgsql窗口函数,分组求sum的方式

    select distinct    quantity,    standard_cost,    sum(a.quantity*a.standard_cost) over(partition by ...

  10. JavaEE Day14 Servlet&HTTP&Request

    今日内容 1.Servlet 2.HTTP协议 3.Request 一.Servlet 1.概念 2.步骤 3.执行原理 4.生命周期 5.Servlet 3.0注解配置 6.Servlet体系结构 ...