JavaSE-关键字


关键字的概述和使用

  • 关键字就是被java语言赋予特殊含义的单词
  • 关键字的特点:组成关键的字母都是小写
  • 关键字的注意事项
    (1): goto和const是java语言的保留字
    (2): 类似与editplus这样的高级文本编辑器对关键字都是有颜色变化的

Java—关键字

类型关键字
与数据类型相关的关键字boolean、int、long、short、byte、float、double、char、class、interface
与流程控制相关的关键字if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally
与修饰符相关的关键字public、protected、private、final、void、static、strictfp、abstract、transient、synchronized、volatile、native
与动作相关的关键字package、import、throws、extends、implements、this、super、instanceof、new
其他关键字true、false、goto、const

private

A.关键字的特点

  • 是一个权限修饰符
  • 可以修饰成员变量和成员方法
  • 被其修饰的成员只能在本类中访问
    B.案例演示
    C.最常见的应用
  • 把成员变量用private修饰
  • 提供对应的getXxx()和setXxx()方法
    D.案例演示

现有一个未封装的Person类

public class person
{
String age;//成员变量name
}

修改age

public static void main (String[] args)
{
Persons Q=new Person();
Q.age=-100;
}

封装后

public class Person
{private int age;//成员变量name前面加上private
public void setAge(int num)
{
age=num;
}
public int getAge()
{
return age;
}
}

修改age和打印age后

public static void main (String [] args)

Person Q =new Person();
Q.setAge(20);
System.out.println(Q.getAge());

this
A.关键字的特点
是当前类的对象的引用(简单来说,它就代表当前类的一个对象,谁调用这个方法,那么该方法的内部的this就代表谁)
B.为什么要有this
当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字的话,那么就会导致一个问题:就是局部变量隐藏了成员变量的问题
C.this的应用场景
解决局部变量隐藏成员变量
D.案例演示
this的应用场景

通过this关键字可以明确的访问一个类的成员变量,解决与局部变量名称冲突问题

public class student{
 String name;//成员变量
 int age;//成员变量
 long phone;//成员变量
 String address;//成员变量
 //有参构造方法
 public Student (String name,int age,long phone,String address){
this.name=name;
this.age=age;
this.phone=phone;
this.address=address;
}
//获取成员变量name的值
public String getName(){
    return this.name;//访问的是成员变量name
}
}

通过this调用成员方法

public class Student {

    public void A(){
        System.out.println("A方法执行了......");
    }
    
    public void B(){
        this.A();//调用A()方法
    }
}

super

子类局部范围访问父类成员变量
A.三种使用方法

  • super.变量/对象名
  • super.方法名()
  • super()

this和super的区别和应用

  • 区别:this 代表的是本类对象的引用
    super 代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)

  • this和super的使用
    a:调用成员变量
    this.成员变量 调用本类的成员变量
    super.成员变量 调用父类的成员变量
    b:调用构造方法
    this(…) 调用本类的构造方法
    super(…) 调用父类的构造方法
    c:调用成员方法
    this.成员方法 调用本类的成员方法
    super.成员方法 调用父类的成员方法

static

A.画图演示:带有static的内存图
在这里插入图片描述

B.static关键字的特点

  • 随着类的加载而加载

  • 优先于对象存在

  • 被类的所有对象共存
    举例:咱们班级的学生应该共用一个班级编号(如果某个成员变量是被所有对象共存的,那么它就定义为静态的)
    举例: 饮水机(用静态修饰)
    水杯(不能用静态修饰)

  • 可以通过类名调用
    其实它本身也可以通过对象名调用
    推荐使用类名调用
    静态修饰的内容一般我们称其为:与类相关的,类成员
    C.案例演示(static关键字的特点)

class Person{
   String name;   //成员变量,实例变量
   static String country="china";   //静态变量   类变量
    public void show()
     {
     System.out.println(country+":"+name);
     }
}

D.static的注意事项

  • 在静态方法中是没有this关键字的(静态是随着类的加载而加载,this是随着对象的创建而存在的;静态比对象先存在)

  • 静态方法只能访问静态成员变量和静态的成员方法 (静态方法只能访问静态,非静态的可以访问静态的也可以访问非静态的)

final

A.final概述:final关键字是最终的意思,可以修饰类、变量、成员方法
B.final修饰特点

  • 修饰类: 被修饰类不能被继承
  • 修饰方法: 被修饰的方法不能被重写
  • 修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量
    C.为什么会有final?
    由于继承中有一个方法重写的现象,而有时候我们不想让子类去重写父类的方法.这对这种情况java就给我们提供了一个关键字: final
    案例演示:(final修饰特点)
    a.修饰类
final class Animal{
   public Animal(){}
}
class Cat extends Animal{
}

b.修饰方法

class Animal{
    /**
     * 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的.
     * 属于子类本身的方法,编译正常.
     */
    private final void getName() {}

    /**
     *  因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错.
     */
//  public final void getName() {}
}

class Cat extends Animal {
    public static void main(String[] args) {

    }

    public void getName() {}
}
}

c.修饰变量

class Animal{
   private  final  int count=0;
   public Animal(){
   count=1;//报错
   final Object  object=new  Object();
   object =new Object();//报错
}
}

面向对象(final关键字修饰局部变量)

基本类型,是值不能被改变
引用类型,是地址值不能被改变

abstract

抽象类和抽象类方法必须要用abstrct关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();

interface

接口用关键字interface表示 格式: interface 接口名 {}

implements

类实现接口用implements表示 格式: class 类名 implements 接口名 {}

extends

继承
A.通过关键字extends继承一个已有的类,被继承的类称为父类(超类 、基类),新的类称为子类(派生类)
B.Java中不允许多继承,只支持单继承
C.一个子类只能有一个父类,一个父类可以派生出多个子类
D.从父类继承的(private)私有的东西是没有访问权限的,只有拥有权,覆盖不了
案例演示

public class Person {
        //私有方法-只能内部使用,外面无访问权限
       private void age(){
        System.out.println("Psrson age");
     }
       public void say(){
   System.out.println("Person say");
 }
        public void cry(){
        System.out.println("Person cry");
     }
       public void run(){
  System.out.println("Person run");
 }
}
 
 
public class ExPerson extends Person {
 
 //覆盖父类方法
 public void say(){
  System.out.println("Son say");
 }
        //重载
    public String cry(String cry){
        System.out.println("Son cry");
        return cry;
    }
      //增加父类所没有的方法
 public void sleep(){
              //用super关键字访问父类方法
        super.say();
             System.out.println("Son sleep");
 }
 
 public static void main(String[] args) {  
        // TODO Auto-generated method stub  
  Person per = new Person();  
  ExPerson exper = new ExPerson();  
        
       per.say();
        exper.say();//覆盖后的方法
        exper.sleep();//增加的方法
        exper.cry("cry");//重载后的方法
        exper.cry();//继承父类的方法
 }

子类可以继承父类的属性和方法,但是子类还可以拥有自己独有的属性和方法,当然,子类还可以重写父类的方法。在调用的时候,首先要学会调用子类的方法,然后在调用父类的方法,如果重写父类的方法,那么子类的方法就可以覆盖了父类相同的方法

面向对象(标准的学生类代码及其测试)

案例演示:把手机类的成员private修饰,给出getXxx()/setXxx()方法

class Demo04_Student{
    public static void main(String[] args){
        Student stu1 = new Student();      //使用空参构造
        stu1.setName("张三");               //设置姓名
        stu1.setAge(23);                    //设置年龄
        //getXxx()获取属性值,可以打印,也可以赋值给其他的变量,做其他的操作(赋值)
        System.out.println("我的姓名是:" + stu1.getName() + "..." + "我的年龄是:" + stu1.getAge());
        Student stu2 = new Student("李四", 24);
        stu2.show();                        //show方法只是为了显示属性值(打印).
        stu2.setName("王五");
        stu2.show();
    }
}

class Student{
    private String name;
    private int age;

    public Student(){

    }

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

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }

    public void setAge(int age){
        this.age = age;
    }

    public int getAge(){
        return this.age;
    } 

    public void show(){
    System.out.println("我的姓名是:"+name+"..."+"我的年龄是:"+age);
    }
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值