程序运行时的内存占用

代码区(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. 9.channels layers

    settings.py配置 # 存储在内存里 CHANNEL_LAYERS = { "default": { "BACKEND": "channels ...

  2. Druid SQL注入防御模块技术浅析

    官方参考: https://www.bookstack.cn/read/Druid/ffdd9118e6208531.md 前置知识 什么是Druid? Druid是一个高效的数据查询系统,主要解决的 ...

  3. day05-JavaScript02

    JavaScript02 8.JavaScript函数 JavaScript函数介绍 函数是由事件驱动的,或者当它被调用时,执行的可重复使用的代码 例子 <!DOCTYPE html> & ...

  4. Django的简单使用

    Django 基础简介 基础简介 1. 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组 ...

  5. golang基础语法学习

    1.函数作为一等公民 2.驼峰命名法/大小写决定是否在包外见 3.包名应该是小写的单个单词命名 4. 包名应为其源码的基础名称,如encoding/base64,包名应为base64而不是encodi ...

  6. 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI

    前言 水泥是建筑工业三大基本材料之一,素有"建筑工业的粮食"之称.2022 年 1-9 月水泥产量为 15.63 亿吨,生产方法包括新型干法.立窑.湿窑.干法中空窑和立波尔窑等. ...

  7. -webkit-box-orient:vertical 编译报错之autoprefixer问题

    由于各大浏览器的兼容问题,autoprefixer 插件 就可以帮我们自动补齐前缀.它和 less.scss 这样的预处理器不同,它属于后置处理器. 预处理器:在打包之前进行处理 后置处理器:在代码打 ...

  8. java 运用jxl 读取和输出Excel

    文章结尾源码以及jxl包 1.输出excel: package JmExcel; import java.io.File; import java.io.FileOutputStream; impor ...

  9. js 传递路径参数到后台的转码和解码

    在开发中遇到前端页面需要将一个附件的路径传递后台实现业务逻辑,但不进行编码一直报404的错误,上代码. 前端编码:JavaScript函数encodeURL() 说明:1 .encodeURL函数主要 ...

  10. 前端HTML不使用flash兼容IE浏览器播放视频

    前言:最近公司项目上有个需求就是在IE8上不使用flash技术来去实现视频播放 分析:IE8不支持HTML5,所以不能使用video标签,在非IE的浏览器可以使用video标签 目录 我的解决 DEM ...