美文网首页
Java基础学习六 关键字

Java基础学习六 关键字

作者: SimonLike | 来源:发表于2021-05-28 09:57 被阅读0次

java语言中的访问控制权限修饰符


  • 访问控制权限修饰来控制元素的访问范围。
  • 访问控制权限修饰符包括:
    • public 表示公开的,任何位置都可以访问。
    • protected 同包、子类,可以访问。
    • 缺省 同包,可以访问。
    • private 表示私有的,只能在本类中访问。
访问控制修饰符 本类 同包 子类 任意位置
public 可以 可以 可以 可以
protected 可以 可以 可以 不行
缺省 可以 可以 不行 不行
private 可以 不行 不行 不行
  • 访问控制权限修饰符可以修饰类。变量。方法...

  • 当某个数据只希望子类使用,使用protected进行修饰。

  • 修饰符范围: private < 缺省 < protected < public。

  • 类只能采用public和缺省的修饰符进行修饰。【内部类除外】

java语言中的this关键字


1,this关键字描述

  • this是一个关键字,翻译为:这个
  • this是一个引用,this是一个变量,this变量中保存了内存地址指向了自身,this存储在jvm堆内存java对象内部。
  • 创建100个java对象,每一个对象都有this,也就是说有100个不同的this
  • this可以出现在"实例方法"当中,this指向当前正在执行这个动作的对象。(this代表当前对象)

2,实例方法和实例变量

  • 没有static关键字的方法称为"实例方法"
  • 没有static关键字的变量称为"实例变量"
  • 在带有static的方法中不能直接访问实例方法和实例变量,因为实例变量和实例方法都需要对象的存在。
  • 而static/静态方法当中是没有this的,也就是说当前对象是不存在的。自然也是无法访问当前对象的实例方法和实例变量。【this不能在静态方法中使用】

3,this关键字什么时候不能省略?

  • 当区分局部变量和实例变量的时候,"this."不能省略。

4, this关键字的使用

  • 可以使用在实例方法当中,代表当前对象。【语法格式:this.】
  • 可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法。[语法格式:this(实参);]
  • this(实参);这种语法只能出现在构造函数第一行。
PS/注意:当一个行为/动作执行的过程当中是需要对象参与的,那么这个方法一定要定义为"实例方法",不要带static关键字。
代码示例:
public class HelloWorld {
    public static void main(String[] args) {//表示定义一个公开的静态的主方法 ps:程序执行入口
        User u = new User();
        u.name = "huangSan";
        // 使用this 实例方法调用
        u.shopping();
        // 普通方法调用
        User.doSome(u);

        User u2 = new User();
        u2.name = "huang333";
        // 使用this 实例方法调用
        u2.shopping();
        // 普通方法调用
        User.doSome(u2);

        // HelloWorld.doOther();// 编译错误 实例方法必须先创建对象,通过"引用."的方式访问
        // doOther是实例方法,实例方法调用必须有对象的存在。
        // 但由于main方法中没有this,所以以下方式不能调用
        // doOther();
        // this.doOther();

        // 正确的调用方式:
        HelloWorld hw = new HelloWorld();
        hw.doOther();
    }

    // 实例方法
    public void doOther(){
        System.out.println("do Ohter!");
        // doOther实例方法,调用doOther方法一定是创建过对象的,才能调用。
        // 在大括号中的代码执行过程中一定是存在"当前对象"的
        // 也就是说这里一定是有"this"的
        doRun();
        // this.doRun(); //完整写法
    }
    // 实例方法
    public void doRun(){
        System.out.println("do Run!");
    }
}
class User{
    String name;
    int age;//实例变量
    public User(){// 构造方法

    }
    // 实例方法
    public void shopping(){

        // 由于name是一个实例变量,所以这个name访问的时候一定访问的是当前对象的name
        // 所以多数情况下"this."是可以省略的
        System.out.println(name+"在购物");
        // 完整写法
        // System.out.println(this.name+"在购物");

    }
    // 带有static的方法
    public static void doSome(User c){
        System.out.println(c.name+"在购物");
    }
}

java语言中的super关键字


1,super关键字描述

  • super能出现在实例方法和构造方法中。
  • super的语法:"super."、"super()"。
  • super不能使用在静态方法中。
  • super.大部分情况下是可以省略的。
  • super(实参);这种语法只能出现在构造函数第一行,通过当前的构造方法去调用"父类"中的构造方法,目的:创建子类对象的时候,先初始化父类型特征。
  • super()和this()不能共存,他们都是只能出现在构造方法的第一行。
  • 无论如何,父类的构造方法一定会执行的。

2,super关键字什么时候不能省略?

  • 父类中有,子类中也有,如果想在子类中访问"父类的特征,"super."不能省略。

java语言中的static关键字


1,static关键字描述

  • static英语单词翻译为静态的
  • static修饰的方法是静态方法
  • static修饰的变量是静态变量
  • 所有static修饰的元素都称为静态的,都可以使用"类名."的方式访问;也可以使用"引用."的方式访问【不建议】

2,什么时候成员变量声明为实例变量

  • 所有的对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性具体的值不同】

3,什么时候成员变量声明为静态变量

  • 所有的对象都有这个属性,并且所有对象的这个属性的值是一样的,建议定义为静态变量,节省内存的开销。
  • 静态变量在类加载的时候初始化,内部在方法区中开辟。访问的时候不需要创建对象,直接使用"类名.静态变量名"的方式访问。

4,可以使用static关键字定义"静态代码块"

  • 语法格式: static{ java语句;}
  • 静态代码块在类加载时执行,并且只执行一次。
  • 静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序依次执行。
  • 静态代码块的作用是什么?怎么用?用在哪?什么时候用?
    • 和具体需求有关,例如项目中要求自类加载时执行代码完成日志的记录。那么这段记录日志的代码就可以编写到静态代码当中,完成日志记录。
    • 静态代码块是java为程序员准备一个特殊的时刻,这个特殊时刻被称为:类加载时刻,若希望在此刻执行一段特殊的程序,这段程序可以直接放到静态代码块当中。
  • 通常在静态代码块当中完成预备工作,先完成数据的准备工具,例如:初始化连接池,解析xml配置文件 ...

5,实例代码块/代码块

  • 实例代码块可以编写多个,也是遵循自上而下的顺序依次执行
  • 实例代码块在构造方法执行之前执行,构造方法执行一次,实例代码块对应执行一次
  • 实例代码块也是java语言为程序员准备的一个特殊时刻,这个特殊时刻被称为:对象初始化时刻。

6,方法什么时候定义为静态的?

  • 方法描述的是动作,当所有的对象执行这个动作的时候,最终产生影响是一样的,那么这个动作已经不再属于某一个对象的动作了,可以将这个动作提升为类级别的动作,模板级别的动作。

  • 静态方法中无法直接访问实例变量和实例方法。

  • 大多数方法都定义为实例方法,一般一个行为或者一个动作在发生的时候,都需要对象的参与。
    但是也有例外,例如:大多数“工具类”中的方法都是静态方法,因为工具类就是方便编程,
    为了方便方法的调用,自然不需要new对象是最好的

demo代码示例:
public class HelloWorld {
    static {//  静态代码块
        System.out.println("类加载--> 静态代码块");
    }
    {//  实例代码块
        System.out.println("-> 实例代码块");

    }
    public HelloWorld(){//  构造函数/方法
        System.out.println("-> 构造函数");

    }
    public static void main(String[] args) {//表示定义一个公开的静态的主方法 ps:程序执行入口

        System.out.println("类加载--> main");
        new HelloWorld();
        new HelloWorld();
    }

}

java语言中的final关键字


关于java语言当中final关键字:

  • final是一个关键字,表示最终的,不可变的。
  • final修饰的类无法被继承。
  • final修饰的方法无法被覆盖。
  • final修饰的变量一旦赋值之后,不可重新赋值。
  • final修饰的实例变量,必须手动赋值,不能采用系统默认值。
  • final修饰的实例变量,一般和static联合使用,被称为"常量"。
    • 常量名建议全部大写,每个单词之间采用下划线衔接。
    • public static final (类型) A_B_C = "" ;
  • final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,被指向的对象无法被垃圾回收器回收。
  • final修饰的引用虽然指向某个对象之后不能再指向其他对象;但是所指对象内部的内存/属性是可以修改的。

demo代码示例:

public class HelloWorld {
    // 实例变量有默认值  final修饰的变量一旦赋值不能重写赋值
    // java语言规定实例变量使用final修饰之后,必须手动赋值,不能采用系统默认值。
    // final int i ; //编译报错

    // 第一种写法
    final int i = 100;

    //第二种写法
    final int num;
    public HelloWorld(){
        this.num = 200;
    }
    // 以上两种写法本质上是一种方式,都是在构造方法执行过程中给实例变量赋值。

    public static void main(String[] args) {//表示定义一个公开的静态的主方法 ps:程序执行入口

        // 创建用户对象
        final User u = new User(100);
        // u = new User(50);// final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,被指向的对象无法被垃圾回收器回收。

        System.out.println(u.getUserId());//100

        u.setUserId(50);//final修饰的引用虽然指向某个对象之后不能再指向其他对象;但是所指对象内部的内存/属性是可以修改的。
        System.out.println(u.getUserId());//50


        System.out.println(Chinese.GUO_JI);

    }
}

class Chinese{
    //需求:每个中国人的国籍都是中国,国籍不会发生改变,为了防止国籍被修改,建议使用final修饰;
    // final修饰的实例变量是不可变的,这种变量一般是和static联合使用,被称为"常量"。
    // 常量的语法格式: public static final 类型 常量名 = 值 ;
    // java规范中要求所有的常量名字全部大写,每个单词之间使用下划线连接。
    //  static final String country = "中国";

       public static final String GUO_JI = "中国";
}

class User {
    private int userId;

    public User(int userId) {
        this.userId = userId;
    }

    public User() {
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }
}

java语言中的package和import


1,关于java语言当中包/package的机制:

  • 1,包有被称为packgae,java中引入package这种语法机制主要是为了方便程序的管理。不同功能的类被分门别类放到不同的软件包当中,查找方便,管理方便,易维护。
  • 2,怎么定义package
    • 在java源程序的第一行上编写package语句。
    • package只能编写一个语句。
    • 语法结构:package 包名;
  • 3,包名的命名规范:
    • 公司域名倒序 + 项目名 + 模块名 + 功能名 ;
    • 采用这种方式重名的几率较低,因为公司域名具有全球唯一性。
  • 4,包名要求全部小写,包名也是标识符,必须遵守标识符命名规则。
  • 5,一包对应的是一个目录。
  • 6,使用了package机制之后,怎么编译?怎么运行?
    • 使用了package机制之后,类名不再是Test01了,类名是:com.simon.javase.test.Test01
代码示例:
package com.simon.javase.test;

public class Test01 {
    public static void main(String[] args) {//表示定义一个公开的静态的主方法 ps:程序执行入口

        System.out.println("com.simon.javase.test.Test01");
    }
}

2,关于java语言当中import:

  • import语句用来完成导入其他类,同一个包下得类不需要导入,不在同一个包下需要手动导入。
  • import语法结构:
    • import 类名;
    • import 包名.*;
  • import语句需要编写在package语句之下,class语句之上。
  • 什么时候需要import?
    • 不是java.lang包下,并且不在同一个包下得时候,需要import进行引入。
代码示例:
//import com.simon.javase.test.Test01;
import com.simon.javase.test.*;

public class HelloWorld {

    public static void main(String[] args) {//表示定义一个公开的静态的主方法 ps:程序执行入口
        Test01  t = new Test01();

    }
}

上篇:Java基础学习五 面向对象
下篇:JavaSE进阶 IDEA开发工具

相关文章

网友评论

      本文标题:Java基础学习六 关键字

      本文链接:https://www.haomeiwen.com/subject/unwqsltx.html