@nextleaf
2018-08-08T09:57:19.000000Z
字数 2299
阅读 830
工作日志
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启动垃圾回收机制,自动清除