@nextleaf
2018-08-08T01:57:19.000000Z
字数 2299
阅读 1087
工作日志 Java 多态 堆 栈
今天老师不仅讲了非访问修饰符static、静态代码块的特点及用法,还讲了堆栈内部存储的一些知识,画了个图让我们理解,在课堂的最后,老师讲了数组的初始化。
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static修饰符,用来修饰类方法和类变量。
final修饰符,用来修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。 共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。 静态域。static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。 对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。
注:
在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字。
static是不允许用来修饰局部变量。
package com.nl.statictest;/*** Created with IntelliJ IDEA 2018.* Description: static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。* 静态变量也被称为类变量。* 局部变量不能被声明为 static 变量* User: 14472* Date: 2018-08-06* Time: 9:25*/public class User {String username;int userage;//类属性,随着类加载而加载static int usernumber=0;static {//通常用于初始化变量的时候System.out.println("静态代码块");}public User() {System.out.println("class User");usernumber++;}public User(String username, int userage) {this();//调用空构造方法this.username = username;this.userage = userage;}public void thinking(){System.out.println(username+"thinking");}public static void worldPeace(){System.out.println("世界和平");}public static void main(String[] args){User user=new User("黄",12);user.thinking();System.out.println(User.usernumber);//晚期对象能调用早期属性//System.out.println(user.usernumber);User user1=new User("sun",12);System.out.println(user1.username);new User();System.out.println(User.usernumber);User.worldPeace();//不应该通过类实例访问静态成员// Inspection info:避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可user.worldPeace();}}
划了个图
函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配。
栈内存特点,数数据一执行完毕,变量会立即释放,节约内存空间。
栈内存中的数据,没有默认初始化值,需要手动设置。
堆内存用来存放new创建的对象和数组。
堆内存中所有的实体都有内存地址值。
堆内存中的实体是用来封装数据的,这些数据都有默认初始化值。
堆内存中的实体不再被指向时,JVM启动垃圾回收机制,自动清除
