20200925黄春跃

20200925黄春跃

知识点总结:

1.关于static:

晚自习看了书上132页的一道课后习题,突然明白了static的含义。

代码如下:


public class Student {
    String name;
    public  void say(String name) {
        System.out.println("Hello"+ name);
    }
    public static void main(String[] args) {
        Student.say("hcys");//错误
    }
}//Cannot make a static reference to the non-static method say(String) from the type Student
    

以上代码最后一行是错误的,因为static修饰的方法不能调用实例化的方法

把上述代码修改一下:

public class Student {
    String name;
    public static void say(String name) {//将示例方法改成静态方法
        System.out.println("Hello"+ name);
    }
    public static void main(String[] args) {
        Student.say("hcys");//此时就可以直接通过类.方法来调用了,也可以new一个对象但不推荐
    }
}

也可以做如下修改:

public class Student {
    String name;
    public void say(String name) {
        System.out.println("Hello"+ name);
    }
    public static void main(String[] args) {
        Person per = new Person();//new一个对象用对象.方法来调用
        per.say("hcy");
    }
}

总结一下:

在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

3.还有注意一点:static不能使用this。

2.封装

封装就是对类内部细节进行隐藏,对外不可见。外部程序不能直接访问。
有效避免外部错误对对象的影响。让使用者只能通过规定的方式来访问数据。是通过访问修饰符来限制
不合理的操作。

public class Students {
    public static void main(String[] args) {
        Persons p1 = new Persons();
//      p1.age = 5;
//      p1.age = -7
        p1.setAge(18);
        p1.say();
        System.out.println(p1.getAge());
    }
}
class Persons{
     private int age;//正常情况下是public int age
     public void say() {
         System.out.println("我今年"+age+"岁了");
     }
     public int getAge(){
         return age;
     }
     public void setAge(int age) {
         if(age >= 0 && age <100){
             this.age = age;
         }else{
             this.age = 18;
         }
     }
    
}

比如这段代码,不想让用户知道有age这个变量,那么如果用户要使用age就让他通过方法来得到age,方法为setAge。还有就是当没有给age设置private的时候,用户可以通过p1.age = -7给age输入一个负值,显然负值是不合理的,这时也可以让用户通过方法来得到age,我们可以在方法中限制age的范围。

用户如果想要得到age的值,就要用另外一个方法 setAge返回他。

3.包

包就是文件夹,包名一般是 公司域名去掉www后倒置 + 项目名 + 模块/功能
作用:

  1. 存放类:包中能存放类,易于找到和使用相应类文件
  2. 访问命名冲突:java中允许有同名类存在,但是不能在同一个包下。可以通过包来区分不同的类
  3. 包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码可能不能访问该类。
    包实际上是一种访问控制机制,通过包来限制和制约类之间的访问关系

4.访问修饰符

访问修饰符可以限制和制约类之间的访问。访问修饰符有四种(三个关键字):
public : 公开的/公共的
protected : 受保护的
什么都不写(Package-Access) : 包访问修饰符
private : 私有的

5.类的访问修饰符

访问修饰符 同包 不同包
public √ √
什么都不写 (Package-Access) √ ×

6.继承

继承是面向对象的三大特征之一。
通过从现有类中继承其属性和方法,来实现充实自身内容,这种现象称为继承。
继承使用 extends 关键字,现有类称为父类/超类/基类,新类称为子类/扩展类。
继承的作用是代码重用,增加软件的可扩展性。
继承分为 单继承 / 多继承 , java 中只支持单继承。也就是一个类只能有一个直接父类。

public class Person {
public String name;
public int age;
public String gender;
public String hobby;
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
}
public class Student extends Person{
}

继承表达的是 is a 关系, Student is a Person 。
特点:

  1. 可以继承父类中用 public 和 protected 和 Package-Access 修饰的属性和方法, Package-
    Access 修饰的属性和方法只能在同包中继承。 private 修饰属性和方法不能被继承。
  2. 父类的构造方法不能被继承
  3. 子类可以扩展
  4. 子类可以重写 Override 父类的方法,不能重写构造方法
  5. 提高类之间的耦合性

今日总结:

今天晚上做题的时候突然对static和构造函数有了新的领悟,然后看到继承的开始。

通过这几天的学习,发现学习java知识是慢慢领悟的过程,当天讲的不能马上明白,要在课后慢慢去思考才能逐渐的明白。

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1