Java面向对象——部分关键字的学习

this关键字

        this关键字代表的是当前正在执行的对象,我们一般使用关键字来区分成员变量和局部变量

public class Student {
    //定义成员变量
    int number;
    String name;
    String gender;
    public Student(int number,String name,String gender){
    //通过this来区分成员变量和局部变量
        this.number=number;
        this.name=name;
        this.gender=gender;
    }
    void printf(){
        System.out.println(this.name);
        System.out.println(this.gender);
        System.out.println(this.number);
    }
    void exam(){
        System.out.println(this.name+"考试");
    }
}

static关键字

       static关键字,被称为静态关键字,static可以修饰成员方法、成员变量、代码块还有内部类。

其主要特点有:1.不依赖于对象,只要类被加载就跟着一起加载;2.优先于对象而存在;3.修饰的成员被所有类而共享;4.可以不创建对象通过类名直接调用。

        我们平常使用到的也就是其中第三点特点:就好比创建了一个汽车人类,这一类的所有对象的共同特点是汽车人,那么我们在定义成员变量的时候就可以使用以下两种方法:

String type0="汽车人";
static String type1="汽车人";

        这两种方法都可以用来定义类型,但是从内存上来考虑:static修饰的type1只在方法区定义一次,但是type0要在每一次创建对象的时候跟着在内存区创建一个type0,长久来看,需要花费很大的空间在这种重复的定义上。

        当然,我们在使用static关键字也要对于第一个特点有很深的理解:只要类被加载就一起加载,这一点利用好,可以帮我们省去很大的工作量:因为当类被加载的时候我们的static所修饰的成员会被一起加载,所以我们可以省去调用对象这一个环节,直接通过类名.的方式来调用成员,比如说我们昨天举的MyMath例子:在我们使用MyMath类之前需要先创建一个对象之后才能调用,但是我们通过对其方法添加static修饰之后可以省去这一步骤:

public class MyMath {
    //通过添加static修饰符来省去创建对象的步骤
    /*
        通过这里我们也可以学习到:如果没有创建成员变量,我们也可以通过创建静态方法来直接调用类中的方法
     */
    public static int max(int x,int y){
        int max=x>y?x:y;
        System.out.println("最大的是:"+max);
        return max;
    }
    public static int max(int x,int y,int z){
        int max=(x>y?x:y)>z?(x>y?x:y):z;
        System.out.println("最大的是:"+max);
        return max;
    }
    public static double max(double x,double y){
        double max=((x-y)>0)?x:y;
        System.out.println("最大的是:"+max);
        return max;
    }
    public static double max(double x,double y,double z){
        double max=((((x-y)>0)?x:y)-z)>0?(((x-y)>0)?x:y):z;
        System.out.println("最大的是:"+max);
        return max;
    }

        接下来我们通过代码来看看如何调用静态与非静态的变量:

public class Saber {

    static int num;
    String ori="orioriori";

    public static void main(String[] args) {
        //静态变量可以被直接调用
        Saber.num=18;
        //静态方法可以通过类名.的方法被调用
        Saber.atk();
        //静态方法里可以调用静态属性,但是不能调用非静态属性
       /*
            System.out.println(ori);
            Saber.run();
        */
    }

    public static void atk(){
        System.out.println("给你一拳");
    }

    void run(){
        System.out.println("winwinwin~");
        //非static可以调用static
        Saber.atk();
    }
}

        其实其中提到的规则道理都很简单,还是:只要类被加载就跟着一起加载。

代码块

        代码块分为静态代码块和实例代码块,都是很容易理解的概念,我们通过接下来的代码来了解,两者有什么区别:

public class Codeblock {
    //实例代码块:直接用大括号包括起来一个符合Java语法的语句即可
    {
        System.out.println("这是一个实例代码块1");
    }
    {
        System.out.println("这是一个实例代码块2");
    }
    //静态代码块:static{//符合Java语法的语句}
    static{
        System.out.println("这是一个静态代码块2");
    }
    static{
        System.out.println("这是一个静态代码块1");
    }
    static void Codeblock(){
        System.out.println("构造方法");
    }
}

        实例代码块:在创建对象的时候会被自动调用执行;

        静态代码块:加载类的时候会自动调用执行;

        那么类在什么时候会被执行,我们首先要知道如果执行类代表着:这个类被调用,所以当有一下三种方式发生的时候就会执行类:1.访问类中的静态成员;2.在一个类中使用main方法;3.创建对象。但是我们要知道类只会被执行一次。

        再然后让我们猜一下:如果创建对象的话,计算机是会先执行构造方法还是先执行实例代码块:答案是先执行实例代码块,并且按顺序执行

        包是为了解决管理程序中维护类名称的麻烦事,尤其是一些同名问题而诞生的,也就是说我们可以通过将处理同一方面的问题放入同一个目录下,以避免同名冲突文件管理的问题。包使用package关键字修饰包,每一个类属于一个特定的包,因此我们平常见到的一个完整的类名其实应该是包名+类名。

        包的命名规范:(报名一般情况下是小写)

        第一级 指该项目的类型,如com,org,gov等,第二级 值项目所开发或者运行的公司名称,第三级 指项目的名称,第四级 指项目模块的名称。

        导入外部包的类,需要使用关键字”import“,在最开头使用import导入,其中java.lang包比较特殊,使用时不需要导入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值