`
xiaozhouzhou
  • 浏览: 13385 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

对关键字final、static的理解

 
阅读更多
一、final关键字
    final在java中表示的意思是最终,也可以称为完结器。可以使用final关键字声明类属性方法,在声明是需注意以下几点:
1)使用final声明的类不能有子类;
2)使用final声明的方法不能被子类所覆写;
3)使用final声明的变量即成为常量,常量不可以修改。

使用final声明的类不能有子类
//使用final定义类,不能被继承
final class Student{
}
//错误,不能继承使用final声明的类
class Unstudent extends Student{
}



使用final修饰的方法不能被子类覆写
class Student{
      //使用final定义的方法不能被覆写
      public final void print(){
          System.out.print("执行了");
      }
}
class Unstudent extends Student{
      //错误,不能覆写用final声明的方法
      public final void print(){
           System.out.print("成功了"); 
      }
}



被final修饰的变量即成为常量,常量不可以修改
calss Student{
     //使用final声明的变量就是常量
     private final String name="张三";
     public void print(){
          //错误,常量不能被修改
          name="李斯"
     }
}

二、static关键字
   static是为静态的意思,也可称为全局。如果现在有些属性希望杯所有的对象共享,则就必须将其声明为static属性,而且一个属性使用了static关键字声明之后,可以直接使用类名称进行调用。如果一个鳄梨中的方法想由类调用,则可以声明为static方法。
1)用static声明的属性成为全局属性(也叫静态属性);
2)用static声明的方法有事被称为“类方法”,可以有类名称直接调用,且静态方法中用到的属性必须都是静态属性;


使用static声明属性

class Person {
	String name;
	int age;
        //用static修饰属性变量,则为常量
	static String city="BJ";
        //构造器传参
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public void info(){
		System.out.println("姓名:"+this.name+",年龄:"+this.age+",城市:"+city);
	}
};
public class People{
	public static void main(String args[]){
                //实例化对象
		Person p1=new Person("张三",25);
		Person p2=new Person("李斯",30);
		Person p3=new Person("王五",35);
		System.out.println("***********修改前*********");
		p1.info();
		p2.info();
		p3.info();
		System.out.println("***********修改后*********");
                //重新给属性city赋值
		p1.city="SH";
		p1.info();
		p2.info();
		p3.info();
	}
}

运行结果为:

下面同过一组图解来说明static声明的属性:

                  a)属性city未改变前

                    b) 属性city未改变后 
    以上程序已经基本完成了修改功能,如我们所知一个类中的公共属性现在由一个对象修改,这样是不合适的。类的公共属性应该由类进行修改是最合适的,因为我们不知道一个类中到底有多少个对象产生。所以在访问static属性时最好可以由类名直接调用,那么有事也就把使用static声明的属性称为类属性。
类属性调用的格式:类名称.static 属性名;上面的代码就可以改为:Person.city="SH"



使用static声明方法
class Person {
       //对所有的属性进行封装
	 private String name;
	 private int age;
	 private static String city="BJ";
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public void info(){
		System.out.println("姓名:"+this.name+",年龄:"+this.age+",城市:"+city);
	}
      //使用static声明方法
	public static void setcity(String c) {
		city=c;
	}
	public static String getCity(){
		return city;
	}
};
public class People{
	public static void main(String args[]){
		Person p1=new Person("张三",25);
		Person p2=new Person("李斯",30);
		Person p3=new Person("王五",35);
		System.out.println("***********修改前*********");
		p1.info();
		p2.info();
		p3.info();
		System.out.println("***********修改后*********");
              //直接使用类名称调用
		Person.setcity("SH");
		p1.info();
		p2.info();
		p3.info();
	}
}

运行结果为:

   在以上程序中,Person类将所有的属性都进行封装,所以想要设置属性就必须使用setter()方法,但是这里的方法是使用static声明的,所以可以直接使用类名称调用。
    特别要提的是,飞static生命的方法可以调用static声明的属性或方法。但是static声明的方法是不能调用非static类型声明的属性或方法。

使用static声明的方法调用非static方法和属性错误代码
class Person{
     private static string city="BJ";
     private String name="张三";
     public static void sPrint(){
          //打印属性name(此处错误,不能调用非static属性)
          System.out.println("name="+name);
         //调用方法print(此处错误,不能调用非static方法)
          print();
     }
     public void print(){
          System.out.println("成功了");
     }
}

  • 大小: 5.2 KB
  • 大小: 8.6 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

    java中final关键字和static关键字详细用法

    根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

    浅析对Java关键字final和static的理解

    本文主要给大家谈谈小编对java关键字final和static的理解,本文给大家介绍的较详细,需要的朋友参考参考下

    有关Java中关键字final的理解

    通常,这类常量数据都是基本类型的数据,并赋予关键字final,同时在对此常量定义时需要进行赋值。  值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。...

    final和static用法详解JAVA

    根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

    21天学会Java之(Java SE第五篇):继承、常用的关键字、封装及权限修饰符、多态

    文章目录继承常用的关键字this关键字static关键字super关键字final关键字封装及权限修饰符封装的作用及其优点权限修饰符封装的使用细节多态多态的概念多态的使用要点对象的转型instanceof运算符类型自动提升及强制...

    Java面试常问问题.doc

    1、面向对象的理解 面向对象是基于面向过程的。在开发过程中,要完成特定的功能就去找相应的对象,如果找不到就创建相应的对象,使用对象,维护完善对象。 2、面向对象和面向过程的区别 面向过程强调的是功能行为; ...

    Java 基础学习笔记:数据类型,常见运算,final & static,Java 常见类,异常 & 反射

    5_关键字.md 6_反射.md 8_泛型.md JDK8新特性.md 正则表达式.md Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、可移植...

    编程技能训练与等级考试辅导:静态变量、常量和方法.pptx

    } public static void main(String[] args){ }}1、声明静态变量或者静态方法,使用static关键字。2、有static修饰的变量/方法,称为静态变量/方法3、没有static修饰变量/方法,称为实例变量/方法(Instance ...

    《java面向对象程序设计-继承和多态》教案.doc

    除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口...

    Java那些必须知道的事儿_CodingPark

    理解final关键字 java实例化对象的5种方式 1、用new语句直接创建对象,这是最常见的创建对象的方法。 2、通过工厂方法返回对象,如:String str = String.valueOf(23); 3、运用反射手段,调用java.

    PHP5 关于面向对象的详细分析和讨论

    里面涵盖了PHP面向对像的所有的内容的详细讨论,让你对面向对象的概念有更深刻的理解.对于某些关键字的使用做了详细的分析其使用方式和注意的事项,如static , private ,public ,protected,final...等 等

    Java 基础面试题

    28. 谈谈你对线程调度的理解 29. JDK动态代理和CGLIB动态代理 30. 反射机制以及反射的方式 31. 类加载有几种方式 32. Class.forName()和ClassLoader.loadClass()的区别 34. 如何防止创建的类名不能java为已有...

    Java 静态方法/变量,非静态方法/变量的区别

    大家应该都明白静态方法/字段比普通方法/字段的写法要多一个static关键字,简单写下他们的写法吧,了解的可以直接略过 class Test{ // 静态变量 public static int id = 1; // 普通变量 public int usualId = 2;...

    AIC的Java课程1-6章

     理解和使用关键字final。  理解包的概念。学会创建包,包中定义类,包外使用类。  掌握package(又称默认,友元)控制符,系统掌握4种访问控制符 第6章 面向对象(多态) 4课时  理解...

    Java的六大问题你都懂了吗

     可见,final只对引用的"值"有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的"值"相等,至于这个...

    【04-面向对象(上)】

    –static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员. 定义构造器的语法格式 •[修饰符] 构造器名(形参列表) {……} –修饰符可以是public protected private 构造器...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

Global site tag (gtag.js) - Google Analytics