Java基础学习笔记-类的静态属性和静态方法--待继续补充
程序运行时的内存占用
代码区(code area) 存放代码
数据区(data area) 存放全局数据、静态数据
堆区(heap area) 存放动态申请的数据
栈区(stack area) 存放局部数据、参数
Static
- 用static修饰的变量称为静态属性,又叫类变量
- 用static修饰的方法称为静态方法,又叫类方法(静态方法里,无this)
- 用来修饰初始化语句块,称为静态初始化语句块
类的静态属性和静态方法
即使没有创建该类的具体对象,类中的static类成员也会存在,这时可以通过:
类名.静态变量
类名.静态方法static方法中不能直接调用非static的域或方法(必须通过对象名引用)。
static函数并不需要先产生任何对象,就可以通
过类名来调用。
non-static数据/函数和对象绑定
在static函数中“直接”取用non-static数据/函数,会产生语法错误。
静态代码块
只能定义在类里,独立于任何方法,不能定义在方法里
里面的变量都是局部变量
会在类被加载时自动执行
一个类中允许定义多个静态代码块,执行顺序=定义顺序
只能访问类的静态成员,不允许访问实例成员(说实话这个我没太搞懂,我再学习一下然后会回来,把这里补一下我的大白话理解)
实例成员通俗理解
- 在类里写的方法就是 成员方法
- 在类里可以直接定义一些变量 成员变量(就是不是写在方法里的那些)
静态代码块与非静态代码块的异同点
- 相同点:
- 都在JVM加载类时且在构造方法执行之前执行,在类中可定义多个
- 在代码块中对一些static变量进行赋值
- 不同点:
- 静态代码块在非静态代码块之前执行
静态代码块—>非静态代码块—>构造方法 - 静态代码块在第一次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基础学习笔记-类的静态属性和静态方法--待继续补充的更多相关文章
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Java基础学习笔记(四)
21.构造方法(续):分类: 隐式构造方法:如果在一个类中,没有手动编写构造方法,则系统会提供一个默认的无参的构造方法 显式构造方法:如果在一个类中,手动编写构造方法,则系统不会提供默认的无参的构造方 ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java基础学习笔记二十八 管家婆综合项目
本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...
随机推荐
- MinGW配置C语言编译器gcc和g++
首先,在 https://sourceforge.net/projects/mingw/files/latest/download 下载安装MinGW,如下图所示: 点Installation-> ...
- JAVA学习前准备
电脑常用快捷键 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+A:全选 Ctrl+X:剪切 Ctrl+Z:撤销 Ctrl+S:保存 Alt+F4:关闭窗口 Shift+delete:永久性删除文件 ...
- Redis系列8:Bitmap实现亿万级数据计算
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...
- Modbus协议及python库实现
基础知识 硬件层协议:解决0和1的可靠传输,常有RS232.RS485.CAN.IIC.SPI - 软件层协议:解决传输目的,常有Modbus.TCP/IP.CANopen - 协议优点: Modbu ...
- Eclipse Python IDE安装
时隔一年,曾经的AI工程师微专业课程也忘了大半,如今终于有闲心重温人工智能的相关知识与项目.先从Eclipse安装开始. 首先下载JDK,进入JDK官网下载最新版本的JDK并安装:https://ww ...
- Dockerfile 跨阶段多阶段使用 ARG 命令
若要想 Dockerfile 的 ARG 命令可以跨多个阶段使用,需要有以下几步: 先在文件最前面使用 ARG 命令定义 然后在每个阶段分别引用 ARG 命令使用 一个示范的 Dockerfile 文 ...
- jquery 中的 $(“#”) 与 js中的document.getElementById(“”) 的区别
以前没注意过,认为jquery 中的 $("#") 与 document.getElementById("") 是一回事,指的是同一个东西. 这次项目开发在使用 ...
- python(牛客)试题解析1 - 简单
导航: 一.NC103 反转字符串 二.NC141 判断是否为回文字符串 三.NC151 最大公约数 四.NC65 斐波那契数列 五.字符按排序后查看第k个最小的字母 六.数组内取出下标相同的元素求和 ...
- c# Winfrom桌面软件自动升级系统
对于开发桌面应用升级应该是我们第一个要考虑的.一般而言一个项目只有一个客户端,有的时候一个项目可能分好几个客户端,前台客户端,后台客户端.而我在网上找了很久也没有找到可以同时管理多个客户端升级的.所以 ...
- 【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)
背景介绍 在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是 ...