java进阶11 static final关键字

  static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。

  被static修饰的成员变量和成员方法独立于该类的任何对象,也就是说。

  它不依赖类的特定的实例,被类的所有实例共享。

  


package Static;

public class Static {
/*
* 使用的情况
* 1:在对象之间共享值时
* 2:方便访问变量
* */

public static void main(String[] args){
Static1.setWord("myword");
System.out.println(Static1.word);
}
}
class Static1 {
//static 全局变量
public static String word="word";//修饰代码块
static {

System.out.println("I am here");

}
//修饰函数
static void setWord(String nword){
//由于static 会在实例生成之前 分配空间 所以不能有this 和super
word=nword;
}
/*
* 创建类实例时会加载类
* 只要出现该类就是没有实例也会加载??
*
* 当类被加载时,就会分配static的空间和执行static代码块
* 在static 修饰的语句中 不能引用实例变量
* 因为那个时候变量还没有生成
* */
}

  这里可以看见,根本没有new Static();而是直接调用。

  因为只要这个类被加载,java虚拟机就会根据类名在运行的数据区的方法找到他们,因此,static对象可以再它的任何对象创建之前访问

  而无需引用任何对象。

  用static 修饰的成员变量和方法 本质就是全局变量和全局方法,因为java是没有全局变量这个说法的。

  该类的所有实例都共享static修饰的东西。

  在加载的时候 static修饰的代码块 或者函数会直接执行。所以输出结果如下:

  I am here
  myword

  

  static修饰的成员变量 如果前面是public 就如上面的代码 能在其他类中访问

  如果是private 则 不能让外部访问

  


package Static;

public class Static {
/*
* 使用的情况
* 1:在对象之间共享值时
* 2:方便访问变量
* */

public static void main(String[] args){

System.out.println(Static1.canot);//出错
Static1.setWord("myword");
System.out.println(Static1.word);
}
}
class Static1 {
//static 全局变量
public static String word="word";
//设定权限,让类不能直接调用类成员 默认是public ??
private static String canot="You can not get this Member";
//修饰代码块
static {
System.out.println(canot);
System.out.println("I am here");

}
//修饰函数
static void setWord(String nword){
//由于static 会在实例生成之前 分配空间 所以不能有this 和super
word=nword;
}
/*
* 创建类实例时会加载类
* 只要出现该类就是没有实例也会加载??
*
* 当类被加载时,就会分配static的空间和执行static代码块
* 在static 修饰的语句中 不能引用实例变量
* 因为那个时候变量还没有生成
* */
}

  主函数的Static1.canot就会报错。

  还有一点就是 在static作用的范围类 是不能操作实例变量的,因为那个时候变量还没创建。

  


class Static1 {
//static 全局变量
public static String word="word";
//设定权限,让类不能直接调用类成员 默认是public ??
private static String canot="You can not get this Member";
String InstanceWord="初始值";
//修饰代码块
static {
System.out.println(canot);
System.out.println("I am here");
System.out.println(InstanceWord);//会出错

}
//修饰函数
static void setWord(String nword){
//由于static 会在实例生成之前 分配空间 所以不能有this 和super
word=nword;
}
/*
* 创建类实例时会加载类
* 只要出现该类就是没有实例也会加载??
*
* 当类被加载时,就会分配static的空间和执行static代码块
* 在static 修饰的语句中 不能引用实例变量
* 因为那个时候变量还没有生成
* */
}

  System.out.println(InstanceWord);这句话也会出错。

  接下来就是static和final连用=全局常量

  对于常量,表示一旦给值就不可修改,并且可以通过类名访问

  对与方法,表示不可覆盖,并且可以通过类名访问。  

  

class Static2{
//static 与final连用时=全局常量
public static final String myword="new Word";
public static final void setWord(){};

}

在主函数中更改其变量值

会报错 同理覆盖setWord方法也是一样.新建个类来覆盖该方法看看

  

class Static3 extends Static2{
public static void setWord(){

}
}

也会报错 会提示将Static2中的setWord的final 去掉。

  这就是static 和final的一些基本知识。

  

java进阶11 static final关键字,码迷,mamicode.com

时间: 2025-01-02 11:21:35

java进阶11 static final关键字的相关文章

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

C++11之final关键字

时间:2014.06.05 地点:基地 ----------------------------------------------------------------------------- 一.禁用继承 C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误. 实例如下: class Super final { //...... }; -----------------------------------------------

java里的static/final含义

java里的static/final含义 static static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期(类加载的时候),初始化后能改变.因此static修饰的属性必须有初始值(数值型变量默认值为0,布尔型默认值为false,引用类型默认值为null).类加载后,存储在方法区(metaspace) static修饰的属性所有对象都只有一个值(但是多个实例都可以同时修改,因此不具有线程安全性). static修饰的属性强调(在多个实

Java中static final 关键字释惑

static static表示"全局"或者"静态"的意思 1. 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的). 对于实例变量,每创建一个实例,就会为实例变量分配一次内存

《JAVA学习笔记 (final关键字)》

[14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] 是一个修饰符,可以修饰类,方法,变量(成员变量,局部变量,静态变量). [特点] 1,final修饰的类是一个最终类,不能派生子类. 如果类中出现部分可以重写,部分不可以,怎么办?只要让指定的方法最终化就可以了. 2,final修饰的方法是最终方法,不可以重写. 3,final修饰的变量是一个常量

Java和C++中final关键字的作用和区别

Java中final关键字的作用: a.作用于类:不允许扩展该类,即不能用该类来定义子类. b.作用于方法:子类不能覆盖这个方法,但是可以被继承. 早期Java中,有程序员利用final来避免动态绑定带来的系统开销.现在这个功能主要由编译器来实现. c.作用于域:构造对象之后不能改变该域的值. d.作用于函数参数:可以读取,但是不能改变该参数. 注意:final类的所有方法自动成为final的,不包括域. 将方法或类声明为final主要目的是确保它们在子类中不会改变语义. String类就是一个

重新认识java(七) ---- final 关键字

你总以为你会了,其实你只是一知半解. final 关键字概览 final关键字可用于声明属性.方法.参数和类,分别表示属性不可变.方法不可覆盖.参数不可变和类不可以继承. 我们来分别看看它的用法. final关键字是一个比较简单的知识点,所以这篇文章我写的比较舒服,你看着也比较舒服.因为,很简单呀~ final 属性 被final修饰的属性不可变.这种不可变的属性,我们可以称之为"常量".这种常量大体上有两种表现形式.先来看下面的代码: public class FinalAttrib

【Java知识点总结】 final关键字与抽象类

final关键字: 概念: 学习了继承我们发现继承有一个弊端,就是它会打破封装性:如果不让其他类继承该类,就不会有重写了,→可以通过Java中的几个关键字来实现,final(最终化). final关键字是一个修饰符,可以修饰类.方法.变量(成员变量.局部变量.静态变量). 什么时候用? 当程序中一个数据使用时是固定不变的,这时为了增加阅读性,可以给该数据起个名字,这就是变量,为了保证这个变量的值不被修改,加上final修饰,这就是一个阅读性很强的常量.书写规范:被final修饰的常量名所有的字母

Java记录 -17- static与final关键字

Java static与final关键字 static关键字:可以修饰属性,也可以修饰方法,还可以用于修饰类. static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化.如果一个成员变量是 static 的,那么我们可以通过 类名.成员变量名 的方式来使用它(推荐使用这种方式). static修饰方法:static修饰的方法叫做静态方法.对于静态方法来说,可以使用 类名.方法名