ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【JavaSE】【面向对象04】this & static & final

2021-12-30 09:31:05  阅读:129  来源: 互联网

标签:变量 static 修饰 JavaSE 方法 final 属性


this关键字

this表示当前对象
(1)在方法内部使用,即表示调用该方法的对象
(2)在构造方法中使用,即表示正在初始化的对象

用法:
1. this.属性
(1)当构造器或方法中有局部变量与实例变量同名时,用于区分局部变量和实例变量。
格式:this.属性
(2)当构造器或方法中没有局部变量与实例变量同名时,可以不加this.
2. this.方法
表示调用当前对象的其他方法,通常情况下,省略this.
3. this()或this(实参列表)
用于调用本类的其他构造方法,必须写在构造器的首行,要避免递归调用
格式:this(); 或 this(实参列表);

补充:使用this访问属性和方法时,如果在本类中未找到,会从父类中查找(从父类继承的当做自己的一样使用)。

static关键字

1.为什么要使用static关键字

当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。

2.类属性、类方法的设计思想

类属性(类变量)作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

3.static修饰的范围

修饰类的内部成员:
可用static修饰属性、方法、代码块、内部类

(1)类变量(class Variable)

当某个属性的值是所有对象共享的,那么这样的属性应该声明为静态的,这样的属性我们称为类变量。

类变量具备以下特点:
1.随着类的初始化而初始化,优先于实例对象的创建
2.修饰的成员,被所有对象所共享
3.访问权限允许时,可不创建对象,直接“类名.xx”调用
4.类变量的值存储在方法区
5.类变量的get/set方法也是静态的
在这里插入图片描述

(2)类方法(class Method)

当方法的功能实现、调用和该类的对象无关时,我们可以把这样的方法声明为static,我们称为静态方法。

  • static修饰的方法,只要访问权限允许,可以通过"类名.方法"访问,因此static的方法也称为类方法。
  • 在static方法内部只能访问类变量与类方法(static属性和方法),不能访问类的实例变量和成员方法(非static属性和方法)。
  • static方法内部不能有this和super。
    如果在静态方法中有局部变量与类变量重名,可以使用“本类名.xxx”
    如果在静态方法中想要访问父类的静态成员,可以使用“父类名.xxx”
    
  • static修饰的方法不能被重写,或者说不会被覆盖
因为静态方法是类方法,是属于类的,和对象无关

(3)代码块

(4)内部类

4、静态与非静态的访问原则(☆)

(1)同一个类中:
静态成员中不能访问非静态的成员
非静态成员中可以访问静态成员
(2)不同类中:
访问其他类的非静态成员必须使用“对象.非静态成员”的格式
访问其他类的静态成员建议使用“类名.静态成员”的格式,也可以使用“对象.静态成员”

其他关键字

final关键字

在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。

  • final标记的类(太监类)不能被继承。提高安全性,提高程序的可读性。
    String类、System类、StringBuffer类
  • final标记的方法不能被子类重写。
    Object类中的getClass()。
  • final标记的变量(成员变量或局部变量)即称为常量,名称大写。
  • final标记的成员变量在使用之前必须手动赋值,赋值的时机:声明的时候 或 在构造方法中 或 代码块中显式赋值; 且只能赋值一次
package _06_Object;

public class _final {
    final int i = 0;
    final int b;
    {
        b = 1;
    }
    final int c;
    public _final(int c){
        this.c = c;
    }

}

native关键字

使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由java去调用。
(1)为什么要用native方法
java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。例如:有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节。
(2)native声明的方法,对于调用者,可以当做和其他Java方法一样使用

  • 一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。
    native method的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节。
  • 如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方法(如果需要的话)。

关于关键字常见问题

1、构造器只能有访问控制修饰符
2、外部类不能使用static修饰,可以使用final修饰
3、属性可以同时使用static和final修饰,叫做全局常量
4、方法可以同时使用static和final修饰,都不能被重写
5、局部变量只能使用final修饰
6、代码块只能使用static修饰

标签:变量,static,修饰,JavaSE,方法,final,属性
来源: https://blog.csdn.net/weixin_43589563/article/details/122229030

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有