`
johnnycmj
  • 浏览: 36918 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

08.面向对象(5)--this、super、final、static等关键字

 
阅读更多

 

8、this、super、final、static等关键字

8.1、this关键字

1).我们想通过构造方法将外部传入的参数赋值给类成员变量,构造方法的形式参数名称与类的成员变量名相同。

 

class Person{
	  String name;
		Public Person(String name){
		    name=name;
		}
	}

 2).假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数,程序代码如下:

 

class Container{
		Component comp;
		public void addComponent(){
			comp = new Component(this);//将this作为对象引用传递
		}
	}
	class Component{
		Container myContainer;
		public Component(Container c){
			myContainer = c;
		}
	}

 3). 构造方法是在产生对象时被Java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。

public class Person{
			String name;
			int age;
			public Person(String name){
	             this.name = name;
			}
			public Person(String name,int age){
				this(name);
				this.age = age;
			} 
	}

 8.2、super

 super关键和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。

不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。

 

  第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。

         第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。

         第三、当子类的成员方法覆盖(重写)了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。


8.3、static

8.3.1、静态变量
定义为静态变量无需实例化即可访问。用static标识符修饰的变量,它们在类被载入时创建,只要类存在,static变量就存在。
class A{
			private static int count = 0;
			public A(){
				count = count + 1;
			}
		}
 8.3.2、静态方法
在方法前加static,同静态成员变量一样,我们可以用类名直接访问静态成员方法,也可以用类的实例对象来访问静态成员方法,还可以在类的非静态的成员方法中象访问其他非静态方法一样去访问这个静态方法,如下面的程序代码
class Chinese{
		static void sing(){
			System.out.println(“啊!” );
		}
		void singOurCountry(){
			sing();
			//类中的成员方法也可以直接访问静态成员方法
		}
	}
	class TestChinese{
		public Static void main(String [] args){
			Chinese.sing();
			//上面的程序代码直接使用了“类名.成员”的格式
			Chinese ch1 = new Chinese();
			ch1.sing();
			//上面的程序代码直接使用了“对象名.成员”的格式
			ch1.singOurCountry();
		}
	}
  在使用类的静态方法时,我们要注意以下几点:
1)在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
2).静态方法不能以任何方式引用this和super关键字(super关键字在下一章讲解)。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。
3).main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中会多次碰到。

8.4、final

在Java中声明类、属性和方法时,可使用关键字final来修饰。
final标记的类不能被继承。
final标记的方法不能被子类重写。
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
如:
final int X=3;
	X=4; //出错
	final标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使用。
	class Test{
		final int X=3;
	}
 或者:
class Test{
		final int X;
		Test(){
			X=3;
		}
	}
  方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。这种情况下,将一个形参定义成final也是可以的,这就限定了我们在方法中修改形式参数的值。
分享到:
评论

相关推荐

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    在Java编程语言中,`final`关键字、抽象类和接口是面向对象编程的重要概念。它们各自扮演着不同的角色,帮助我们构建更健壮、可维护的代码结构。 首先,`final`关键字在Java中具有多种用途。它可以用来修饰类、方法...

    java中“53”个关键字(含2个保留字)

    在Java编程语言中,关键字是具有特殊含义的预定义标识符,它们被Java解析器用来识别语法结构。...通过深入理解关键字的作用,开发者可以更好地掌握Java的面向对象特性、异常处理、内存管理以及多线程等核心概念。

    Java this、final等关键字总结

    Java中的关键字this、...总的来说,Java的`this`、`final`、`super`以及相关概念如`implements`、`static`和`instanceof`都是面向对象编程中的关键要素,理解和掌握它们能够帮助开发者编写出更加高效、可维护的代码。

    面向对象修饰符public private protest super final abstract理解

    以上就是关于面向对象编程中`public`、`private`、`protected`、`final`、`abstract`、`super`和`this`等关键字的详细介绍。这些概念是面向对象编程的基础,掌握它们有助于更好地理解和应用面向对象的设计原则和技术...

    java---- 封装,接口,继承,覆盖,构造过程,多态,static、this、super、final用法

    通过以上对封装、继承、覆盖、构造过程、多态以及 `static`、`this`、`super` 和 `final` 关键字的详细介绍,我们可以更好地理解和运用Java的核心概念和技术点,从而编写出更加高效、灵活和易于维护的代码。

    JavaScript 保留关键字

    1. `abstract` - 虽然在JavaScript中未被使用,但在某些面向对象的语言中表示抽象类。 2. `arguments` - 一个内置对象,存储函数调用时传入的参数。 3. `boolean` - 数据类型,表示布尔值。 4. `break` - 结束循环或...

    【IT十八掌徐培成】Java基础第02天-01.java关键字.zip

    3. 类与对象关键字:`public`, `private`, `protected`, `static`, `final`, `abstract`, `void`, `this`, `super`, `new`, `instanceof`。它们用于定义类的访问权限、修饰成员变量和方法、创建对象、进行类型检查等...

    JAVA关键字总结(整理后最全最详细)

    - `class` 关键字用于定义类,是面向对象编程的基础。例如: ```java public class MyClass { // class members } ``` 9. `continue`: - `continue` 语句用于跳过当前循环体中剩余的语句,然后继续下一轮...

    面向对象程序设计Java听课笔记

    - static关键字:静态成员属于类,不依赖于类的实例,常用于创建单例、静态变量和静态方法。 - final关键字:用于声明不可变的变量、类或方法,确保数据安全和代码优化。 4. 继承与多态 - super关键字:用于访问...

    accp6.0_使用Java面向对象编程_笔记.doc

    ### 使用Java面向对象编程知识点详解 #### 一、面向对象编程基础 **1. 抽象与封装** - **抽象**: 类是对具有相似特性的对象的抽象,对象是类的具体实例。面向对象设计的核心在于从具体事物中抽象出类的概念,并...

    极客营9营考试题目借鉴.pdf

    【知识点详解】 1. Java集合框架: - 题目中提到了ArrayList、...以上就是从题目中提取出的Java编程相关的知识点,包括集合框架、接口、多线程、类与对象、构造器、方法重写、关键字super和this以及变量的作用域等。

    Java知识表格,java ee,java web

    - **static关键字**:详解static关键字的用途及其注意事项。 - **单态设计模式**:介绍单例模式的原理及实现方式。 ##### 13. 面向对象高级(01) - **继承的基础**:解释继承的概念及其重要性。 - **子类对象的...

    Java中的保留字和关键字.doc

    对于Java这门广泛使用的面向对象编程语言而言,理解其关键字与保留字的含义及用途至关重要。本文将详细介绍Java中的关键字和保留字,并探讨它们在程序开发中的应用。 #### 二、Java关键字详解 Java关键字是对Java...

    小码哥-任小龙Java笔记-面向对象的全部笔记

    ### 小码哥-任小龙Java笔记-面向对象的核心知识点 #### 一、面向对象基础概念 **1. 成员变量** - **定义位置**:成员变量定义在类中但不在任何方法内,分为类成员变量(使用`static`修饰)和实例成员变量(不使用...

    java关键字.pdf

    Java是一种面向对象的编程语言,它的关键字在编程中扮演着至关重要的角色,因为它们具有特殊的含义,被编译器识别并执行特定的功能。以下是对Java关键字的详细解释: 1. **访问控制修饰符**: - `private`:用于...

    Java 关键字.docx

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在Java中,关键字是被语言本身所保留的标识符,它们有着特殊的含义,用于构建程序的不同方面。以下是对Java关键字的详细...

    java基础核心总结归纳---参考手册--心得手册-学习资料-总结经验

    Java的核心概念包括类、对象、封装、继承、多态等,这些构成了面向对象编程的基础。 1. Java 概述 - Java 分为三个版本:JavaSE(标准版),适用于桌面应用;JavaEE(企业版),用于开发企业级应用;JavaME(微型...

    个人笔记--JAVA基础

    static关键字的使用** - 用于定义静态变量或方法,不依赖于对象实例存在。 - **3.1.12. final关键字的使用** - 用于定义不可修改的变量或方法。 - **3.1.13. 类的初始化加载顺序** - 类加载时,首先初始化静态...

    JAVA 2面向对象程序设计(随书范例程序)4-6.rar_面向对象

    面向对象编程(Object-Oriented Programming,简称OOP)是Java语言的核心特性,它通过类和对象的概念,实现了代码的封装、继承和多态性,极大地提高了软件开发的效率和可维护性。在这个名为"JAVA 2面向对象程序设计...

    Java的考试复习资料整理

    ### Java的考试复习资料整理 #### 一、Java的基本概念及语法 ...以上是Java考试复习的核心知识点概述,涵盖了从基本语法到面向对象编程的主要概念和技术。理解并掌握这些知识点对于深入学习Java编程语言至关重要。

Global site tag (gtag.js) - Google Analytics