static修饰符:

static修饰符能够与属性、方法和内部类一起使用,表示静态的。类中的静态变量和静态方法能够与类名一起使用。不须要创建一个类的对象来訪问该类的静态成员。

class StaticText{
//静态变量
static int i=47;
//静态方法
static void echo(){
System.out.println("There is a Static Method");
}
//构造函数
StaticText(){
System.out.println("There is a Constructor");
}
//静态域
static {
System.out.println("There is a static block");
} }
public class Text {
public static void main(String[] args) {
StaticText A = new StaticText();
StaticText B = new StaticText();
//A.i和B.i指向同一内存空间
System.out.println(A.i==B.i);
A.i++;
//此时还是有A.i==B.i
System.out.println(B.i);
//使用类名訪问时首选方法,这不仅仅是由于它强调了变量的static结构,还为编译器进行优化提供了更好的机会
System.out.println(StaticText.i);
}
}

执行结果为:

There is a static block

There is a Constructor

There is a Constructor

true

true

48

static属性的内存分配:一个类中,一个static变量仅仅会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。

静态初始器——静态块 : 静态初始器是一个存在与类中方法外面的静态块。仅仅在类装载的时候执行一次。通经常使用来初始化静态的类属性。

static的变量是在类装载的时候就会被初始化,即, 仅仅要类被装载,无论是否使用了,都会被初始化。

static的基本规则:

  • 一个类的静态方法仅仅能訪问静态属性。
  • 一个类的静态方法不能直接调用非静态方法。
  • 如訪问控制权限同意,static属性和方法能够使用对象名加“.”的方式调用。也能够使用实例加“.”的方式调用;
  • 静态方法中不存在当前对象。因而不能使用this,也不能使用super;
  • 静态方法不能被非静态方法覆盖;
  • 构造方法不同意声明为static的。

虽然当static作用于某个字段时,肯定会改变数据创建的方式(由于static字段对于每个类来说仅仅有一份存储空间,而非static字段则是对每个对象有一个存储空间)。

可是static作用于某个方法时。区别就没有那么大。static方法的一个重要作用就是在不创建不论什么对象的前提下就能够通过类名来调用它。


final修饰符

在Java声明类、属性和方法时,能够使用关键字final来修饰,final所标记的成分具有终态的特征,表示终于的意思。

final修饰符的基本规则:

  • final标记的类不能被继承。
  • final标记的方法不能被子类重写;
  • final标记的变量(成员变量或局部变量)即成为常量。仅仅能赋值一次。
  • final标记的成员变量必须在声明的同一时候赋值,假设在声明的时候没有赋值,那么仅仅有一次赋值的机会,并且仅仅能在构造方法中显式赋值。然后才干使用。
  • final标记的局部变量能够仅仅声明不赋值,然后再进行一次性的赋值。
  • final一般用于标记那些通用性的功能、实现方式或取值不能任意被改变的成分。以避免被误用。

内部类

在一个类(或方法、语句块)的内部定义还有一个类,后者称为内部类,有时也称为嵌套类。

内部类的特点:

  • 内部类能够体现逻辑上的从属关系,同一时候对于其他类能够控制内部类对外不可见等。
  • 外部类的成员变量作用域是整个外部类。包含内部类,但外部类不能訪问内部类的private成员。
  • 逻辑上相关的类能够在一起,能够有效地实现信息隐藏 内部类能够直接訪问外部类的成员。
  • 编译后,内部类也被编译为单独的类。名称为outclass$inclass的形式。

public class Outer{
private int size=0;
class Inner{
public int counter = 10;
public void doStuff(){
size++;
}
}
public static void main(String [] args){
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.doStuff();
System.out.println(outer.size);
System.out.println(inner.counter);
}
}

内部类能够分为四种:1、类级:成员式。有static修饰;2、对象级:成员式。普通。无static修饰;3、本地内部类:局部式。4、匿名级:局部式。

静态变量存放在方法区中。

static、final修饰符、内部类的更多相关文章

  1. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

  2. String的实例化与static final修饰符

    String两种实例化方式 一种是通过双引号直接赋值的方式,另外一种是使用标准的new调用构造方法完成实例化.如下: String str = "abcd"; String str ...

  3. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...

  4. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  5. java中static和final修饰符

    static和final修饰符 一.static修饰符 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. ...

  6. final修饰符

    final本身的含义是"最终的,不可变的",它可以修饰非抽象类,非抽象方法和变量.注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的. final修饰的类: ...

  7. 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误

    在Java中修饰符总共有一下几种: 1.访问控制修饰符    分别有:public private protected,缺省 2.其它修饰符      分别有:abstract,final,stati ...

  8. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  9. java中接口的概念及使用(补充final修饰符的使用)

    接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...

随机推荐

  1. 计蒜客 UCloud 的安全秘钥(困难)(哈希)

    UCloud 的安全秘钥(困难) 编辑代码 9.53% 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘 ...

  2. VM虚拟机安装kali linux

    点击文件,新建虚拟机新建一个虚拟机 点击后出现这个,选择典型 点击下一步,然后选择安装程序光盘映像文件(iso),然后浏览,找到你下载的镜像 点击下一步,选择linux,选择最高Debian版本的,6 ...

  3. CocurrentHashMap和HashTable区别分析

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...

  4. JZYZOJ 1388 旅游 状压dp

    http://172.20.6.3/Problem_Show.asp?id=1388   求拓扑排序方案数 状压dp,最开始以为是拓扑排序加数论或者搜索,没想到是状压dp,突然气死.jpg: 完全没有 ...

  5. [BZOJ 2427] 软件安装

    Link: BZOJ 2427 传送门 Solution: 只看样例的话会以为是裸的树形$dp$…… 但实际上题目并没有说明恰好仅有一个物品没有依赖项 因此原图可能由是由多棵树与多个图组成的 先跑一遍 ...

  6. [BZOJ5046]分糖果游戏

    题目大意: 有a,b两个人分糖,每个人都有一个能量值. 每个人每一轮可以选择进行两种操作: 1.取走最左边的糖果,补充相应的能量值并获取相应的美味度. 2.跳过这一轮,能量值-1. 问在每个人都采取最 ...

  7. [JZOJ5426]摘Galo

    题目大意: 有一棵n个结点的树,每个点都有一个权值,你要从中选出不超过k+1个点使得权值和尽量大. 同时要注意如果一个点被选择,那么它的子树和这个点到根结点路径上的点不能被选择. 思路: 很水的树形D ...

  8. 从源码入手,一文带你读懂Spring AOP面向切面编程

    之前<零基础带你看Spring源码--IOC控制反转>详细讲了Spring容器的初始化和加载的原理,后面<你真的完全了解Java动态代理吗?看这篇就够了>介绍了下JDK的动态代 ...

  9. Python学习笔记 | 关于python数据对象 hashable & unhashable 的理解

    文章目录 写在前面 hashable & unhashable mutable & immutable 实例检测 后续思考 参考文章 写在前面 Hash(哈希.散列)是一个将大体量数据 ...

  10. [转]Windows7下如何在MyEclipse更改JSP默认编码

    分步阅读 一般情况下,用MyEclipse创建Web项目,在WebRoot目录下新建JSP页面,页面的编码格式是:ISO-8859-1,而这个编码格式不 可以解决多种语言文本显示问题,特别是中文,容易 ...