1,this

//在方法中出现了局部变量和成员变量同名的时候,可以在成员变量名前面加上this.来区别成员变量和局部变量。

//1.在构造调用另一个构造函数,调用动作必须置于最起始的位置,即this()放在构造函数第一行。 2.不能在构造函数以外的任何函数内调用构造函数。 3.在一个构造函数内只能调用一个构造函数。

public class ThisTest {
    private int age;
    private String str;
 
    ThisTest(String str) {
       this.str=str;
       System.out.println(str);
    }
    ThisTest(String str,int age) {
       this(str);    //this()放在构造函数第一行
       this.age=age;
       System.out.println(age);
    }
 
    public static void main(String[] args) {
       ThisTest thistest = new ThisTest("this测试成功",25);
      
    }
}

2,private:

//private不能修饰局部变量!

查看博客https://blog.csdn.net/krismile__qh/article/details/88668456

3,static(记住凡是被static修饰的都是属于类,不属于具体的对象)

1. static方法:被static修饰的成员可以并且建议通过类名直接访问。类名.属性;类名.方法名();

静态方法不可以操作非静态变量!

2. static成员变量:

3. static代码块:属于类,只被执行一次

还有一个局部代码块,位置在方法中;

4. 注:1>静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。2>同一个类中,静态成员只能访问静态成员。

4,super

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。

注:super() 与 this() 必须放在构造函数第一行且不能同时存在;

代码示例:

package cn.galc.test;

/**
 * 父类
 * @author gacl
 *
 */
class FatherClass {
    public int value;
    public void f() {
        value=100;
        System.out.println("父类的value属性值="+value);
    }
}

/**
 * 子类ChildClass从父类FatherClass继承
 * @author gacl
 *
 */
class ChildClass extends FatherClass {
    /**
     * 子类除了继承父类所具有的valu属性外,自己又另外声明了一个value属性,
     * 也就是说,此时的子类拥有两个value属性。
     */
    public int value;
    /**
     * 在子类ChildClass里面重写了从父类继承下来的f()方法里面的实现,即重写了f()方法的方法体。
     */
    public void f() {
        super.f();//使用super作为父类对象的引用对象来调用父类对象里面的f()方法
        value=200;//这个value是子类自己定义的那个valu,不是从父类继承下来的那个value
        System.out.println("子类的value属性值="+value);
        System.out.println(value);//打印出来的是子类自定义的那个value的值,这个值是200
        /**
         * 打印出来的是父类里面的value值,由于子类在重写从父类继承下来的f()方法时,
         * 第一句话“super.f();”是让父类对象的引用对象调用父类对象的f()方法,
         * 即相当于是这个父类对象自己调用f()方法去改变自己的value属性的值,由0变了100。
         * 所以这里打印出来的value值是100。
         */
        System.out.println(super.value);
    }
}

/**
 * 测试类
 * @author gacl
 *
 */
public class TestInherit {
    public static void main(String[] args) {
        ChildClass cc = new ChildClass();
        cc.f();
    }
}

5,extends

继承: 一个类里面有很多的功能,如果我想拓展这个类,而这个类又不允许你修改,你只能继承这个类,并拓展你的功能即可

1、为什么要继承?为了增强一个类的功能,并且代码看着有层次
2、继承使用什么写法:类 extends 父类
3、理论讲父类的所有东西除了私有的,子类能使用
4、调用子类,子类会自动实例化父类,调用父类的无参构造方法
5、如果想调用父类的有参数的构造方法  super(参数)

子父类中成员方法的特点:当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。

成员方法特殊情况——覆盖:子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。

//注:重写需要注意的细节问题

  1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。

class Fu(){

void show(){}

public void method(){}

}

class Zi() extends Fu{

@Override//重写时打上这个字符串,起检测作用,检测这个方法是不是重写,是就不报错,否则报错

public void show(){}  //编译运行没问题

void method(){}      //编译错误

}

2.  写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。

总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。

6,instanceof

通过 instanceof关键字 来判断某个对象是否属于某种数据类型.

如学生的对象属于学生类,学生的对象也属于人类。

7,final

final 可以修饰一个参数,可是该参数不能再在方法中赋值!

//final的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。

//注:1.如何定义一个常量,必须public  static final,必须 名字大写,public  static final  float PI = 3.1415f;  2.String类是final类

//final的特点:

  1. final修饰类不可以被继承,但是可以继承其他类。
  2. final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。
  3. final修饰的变量称为常量,这些变量只能赋值一次。
  4. 引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改。

final Person p = new Person();

Person p2 = new Person();

p = p2; //final修饰的变量p,所记录的地址值不能改变

p.name = "小明";//可以更改p对象中name属性值

//p不能为别的对象,而p对象中的name或age属性值可更改。

5. 修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)

class Demo {

//直接赋值

    final int m = 100;

//final修饰的成员变量,需要在创建对象前赋值,否则报错。

    final int n;

    public Demo(){

//可以在创建对象时所调用的构造方法中,为变量n赋值

n = 2016;

}

}

8,abstract

1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中,抽象方法没有方法体,用分号结尾。而抽象类中可以没有抽象方法,也可以有具体的方法。

2、抽象类不可以直接创建对象(即不能被实例化),原因:调用抽象方法没有意义。但抽象类却有构造方法,抽象类的构造方法只是为了让子类调用。

3、只有覆盖了(重写)抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类,即抽象子类可以不重写父类的抽象方法。

4、abstract只能修饰类和方法!不能修饰变量。

5、final、private、static和abstract不能同时存在!

之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单。

9、interface

接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

  1. 类和接口是平级关系,类通过class 修饰,接口以interface修饰。定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字,编译后仍然会产生.class文件。
  2. 定义格式:

public interface 接口名 {

抽象方法1;

抽象方法2;

抽象方法3;

}

3.使用interface代替了原来的class,其他步骤与定义类相同:(与抽象类的不同之处)

1>接口中的方法均为公共访问的抽象方法

(特殊情况说明:

1)如果接口中被static修饰,该方法必须有方法体

2)如果接口中的方法被default修饰,该方法必须有方法体)

2>接口中无法定义普通的成员变量,一般是常量,常量一般是public static final修饰

4. 接口不能被实例化,接口没有构造方法

5. 一个类可以实现多个接口 public class A implements B,C...{},一个实现类必须实现接口中的所有抽象方法,即重写。

6. 一个接口可以继承另一个接口 public interface A extends B,C..{},接口之间是多继承,类之间是单继承。

7. 一个类可以extends 父类,并且 implements 接口A,B...

8. 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

10,default

用法:1) switch   2) 接口中修饰方法时 default
 不要和这种混淆: public protected 无   private

11,enum(枚举)

1.枚举是引用数据类型。枚举类实际上就是声明了同一类型的一堆常量,便于使用和查看;

2.声明枚举:

​ 格式:

​ public enum 枚举名{

​ //枚举的取值范围

​ //枚举中可以声明方法

​ }

例如:

//声明一个表示季节的枚举
        public enum Season{
              SPRING,
              SUMMER,
              AUTUMN,
              WINTER;
              public void fun(){}
        }

3.注意:

1.枚举中的成员是此枚举的取值范围;

2.所有的值之间使用逗号分隔,最后一个值后可以加分号也可以不加分号;

3.在枚举中可以声明方法,但是必须在所有的取值之后声明,而且最后一个值后必须使用分号隔开

4.枚举的本质:其实就是终止类final,不能被继承,并继承Enum类Public abstract calss Enum{}

5.枚举中的变量,其实就是一个当前类型的静态常量。

4.枚举类型举例:

SPRING 是常量,是Season的一个实例化对象,默认调用的是他的无参构造方法
如果编写了有参数的构造方法,这些常量对象就要传递参数了,这个里面的构造方法是默认访问权限
枚举类中也可以有普通方法

5. 枚举结合switch结构使用

public class TestSeasonEnmu{
            public static void main(String[]args){
                  //声明一个枚举变量
                Season season = Season.SPRING;
                  //switch小括号中的表达式类型可以是枚举类型
                switch(season){
                  //每个case后的常量直接写枚举的取值范围
                  case SPRING:
                    System.out.println("春天");
                    break;
                  case SUMMER:
                    System.out.println("夏天");
                    break;
                  case AUTUMN:
                    System.out.println("秋天");
                    break;
                  case WINTER:
                    System.out.println("冬天");
                    break;
                }
            }
        }

6.补充一下单元测试:

单元测试:

1. 一个普通类,编写一个方法
2. 这个方法必须是public ,必须是void返回,建议方法名称是test开头,千万不要将类名写成Test
3. 方法上必须写@Test注解,如果报错,导入包
4. 单元测试类似于main方法,主要用于测试代码

Java关键字详解this、private、static、super、extends继承、instanceof、final、abstract、interface、implements、enum...相关推荐

  1. Java关键字详解-配视频讲解链接(附带一些面试题)

    Java中常用的关键字详解-配视频讲解链接(附带一些面试题) 关键字:被Java赋予了特定含义的英文单词.关于关键字的学习贯穿了整个Java的学习,结合应用理解记忆关键字,不能单纯的死记硬背,在这里通 ...

  2. Java static静态关键字详解(public、 private、 volatile)

    文章目录 前言 static要解决什么问题? 格式 特点 static静态变量 静态变量和实例变量的区别 static静态方法 static应用场景 static 与volatile static如何 ...

  3. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  4. Java中super关键字详解

    Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...

  5. Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类

    Day16-01 P71 面向对象12:什么是多态 //父类Person package com.oop.demo06;public class Person {public void run(){S ...

  6. java中new关键字详解

    java中new关键字详解 在java中我们可以经常使用new来创建一个对象,但是这对于初学者来说可能只会使用却不能理解new关键字和它的语法 new关键字的语法 注意使用前先导包,一般我们使用ide ...

  7. 教妹学Java(十九):continue 关键字详解

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 2019 年度的博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我 ...

  8. 在 C/C++中 static 关键字详解

    static 关键字详解 C/C++ 中的 static 1. 静态局部变量 2. 静态全局变量 全局变量 与 extren 3. static 修饰函数 C++的 static 成员 静态成员变量 ...

  9. Java异常详解及如何处理

    来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...

最新文章

  1. Mysql中的递归层次查询(父子查询,无限极查询)
  2. 〖Android〗从Android Studio转为Eclipse开发项目运行程序闪退的解决方法
  3. 【自动驾驶】7. MDC常用术语、DDS、SOME/IP
  4. BAT笔试试题常见试题总结含答案(持续更新。。。)
  5. Fail to connect to camera service的几种原因和解决方法
  6. 每日程序C语言11-求s=a+aa+aaa+aaaa+aa…a
  7. vr格式视频价格_如何以100美元的价格打造自己的VR耳机
  8. 田渊栋教你读paper的正确姿势
  9. windows下面常用的***测试命令
  10. echarts 按需引入模_【React】react项目引入echarts插件
  11. iOS AnchorPoint 引起的坐标问题
  12. 一块移动硬盘怎样兼容Mac和Windows系统,并且可以在time machine上使用
  13. nginx + tomcat配置负载均衡
  14. 迅捷pdf转换器——PDF批量转化成JPG
  15. 【国产mcu填坑篇】------STC(宏晶)
  16. ln 硬链接和软链接
  17. 如何读取 PEM 文件以获取公钥和私钥
  18. TM1622的程序设计实现
  19. IdentityServer4(七):Consent授权页支持
  20. happen before

热门文章

  1. SAP FICO 第五节 物料分类账ML配置及应用
  2. 希望计算机专业同学都知道这些老师
  3. 你愿意做高学历却抑郁的人,还是低学历开心的人?(持续更新中)
  4. 24点游戏java代码 中国开源社区_编程实现一个有GUI的24点游戏
  5. 618投影仪怎么选?看看极米NEW Z6X、极米Z6X Pro与极米H3S
  6. 联想大数据“双拳”出击另有深意
  7. [Antergos] 大女儿调教日记
  8. 微信支付分开通了,来看看你有多少分
  9. 【教程】Unity 与 Simence PLC 联动通讯
  10. 树莓派安装mplayer,并使用命令查看摄像头