java 笔记 chapter4 关键字static,final,内部类,内存管理

关键字static
静态块 static block  
关键字final
内部类inner classes
内存分配:
 
关键字static
1,关键字static表示静态,能够与属性,方法,内部类一起使用。
2,static属性的内存分配:
1),类一装载就分配了内存空间给static。static 的变量是在类装载的时候就会被初始化。也就是说,只类被装载,不管你是否使用了这个static 变量,它都会被初始化。
2),一个类中,一个static 变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static 变量会共享同一个内存空间。
3,static 的基本规则                                                      
1),一个类的静态方法只能访问静态属性 
public class StaticTest01{
     public static void main(String [] args) {
          A a = new A();
          A.a1();   //一个类的静态方法只能访问静态属性
     }
}
class A{
     public static int i = 110;
     int j = 120;
     public static void a1() {
          System.out.println("非静态变量i==" + i);
          System.out.println("非静态变量j==" + j);  //报错
     }
}
 
2),一个类的静态方法不能够直接调用非静态方法  
public class StaticTest02{
     public static void main(String [] args) {
          A a = new A();
          A.a1();  //报错,a1()是非静态方法
          a.a1();
     }
}
class A{
     public static int i = 110;
     int j = 120;
     public void a1() {
          System.out.println("静态变量i==" + i);
     }
    
     public static void a2() {
          System.out.println("静态变量i==" + i);
     }
}
3),如访问控制权限允许,static 属性和方法可以使用对象名加 ‘.’方式调用;当然也可以使用实例加 ‘.’方式调用。 
4),静态方法中不存在当前对象(因为没有new),因而不能使用 “this ”,当然也不能使用”super”;  
5),静态方法不能被非静态方法覆盖;  
6),构造方法不允许声明为static 的  
 
 
 
static块:
静态块是一个存在于类中,方法外面的带有static修饰的块。
静态块只在类装载的时候(第一次使用类的时候)执行一次。
一般是用来初始化静态的类属性。
 
关键字final
1,final表示最终的,可以修饰类,方法和属性。
2,final 的规则:
final 标记的类不能被继承。 
final 标记的方法不能被子类重写。 
final 标记的变量 (成员变量或局部变量)即成为常量,只能赋值一次。  static不能修饰局部变量
final 标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。 
final 标记的局部变量可以只声明不赋值,然后再进行一次性的赋值。 
final 一般用于标记那些通用性的功能、实现方式或取值不能随意被改变的成分,以避免被误用,
 
static和final的联系:
同一个方法或者属性,可以同时使用static和final修饰,一般static写前面,final写后面
public static final String NAME = "java开发";  (比较常用)
public final static String NAME = "java开发";
 
 
内部类:
允许在一 个类(或方法、语句块)的内部定义另一个类,后者称为内部类
分类:
类级
对象级
匿名内部类
 
 
 
内存分配:
Java 程序运行时的内存结构分成:方法区、栈内存、堆内存、本地方法栈几种。
方法区:每个类装载进来后,分成3部分,定义部分,常量池和静态变量
 
栈内存:存放变量名,基本数据,少量的字符串,
              栈的特点:栈是等长的,栈里面的值是不可以改变的,
堆内存:存放由new 创建的对象和数组
本地方法栈:Java 通过Java 本地接口JNI (Java Native Interface)来调用其它语言编写的程序,
原文地址:https://www.cnblogs.com/wxc-xiaohuang/p/3479402.html