• Java基础学习笔记类的静态属性和静态方法待继续补充


    程序运行时的内存占用

    代码区(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,如果本文有错误,欢迎路过的小哥哥小姐姐们帮助我纠正错误哦~~

  • 相关阅读:
    python图像仿射变换实战-提取手写数字图片样本
    详解增强算术赋值:“-=”操作是怎么实现的?
    Pycharm激活码,2020最新Pycharm永久激活码!
    Python爬虫视频教程百度云网盘免费分享
    尚学堂高淇Python400集全套视频教程百度云网盘分享
    Python入门教程哪个好?看看这套怎么样!
    python框架Django实战商城项目之工程搭建
    Python入门书籍电子版PDF百度云网盘免费下载
    廖雪峰老师Python教程及配套视频教程
    manjaro(arch)里的vbox 安装centos7后,centos无法联网的解决办法
  • 原文地址:https://www.cnblogs.com/sugartang/p/15851449.html
Copyright © 2020-2023  润新知