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后倒置 + 项目名 + 模块/功能
作用:
- 存放类:包中能存放类,易于找到和使用相应类文件
- 访问命名冲突:java中允许有同名类存在,但是不能在同一个包下。可以通过包来区分不同的类
- 包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码可能不能访问该类。
包实际上是一种访问控制机制,通过包来限制和制约类之间的访问关系
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 。
特点:
- 可以继承父类中用 public 和 protected 和 Package-Access 修饰的属性和方法, Package-
Access 修饰的属性和方法只能在同包中继承。 private 修饰属性和方法不能被继承。 - 父类的构造方法不能被继承
- 子类可以扩展
- 子类可以重写 Override 父类的方法,不能重写构造方法
- 提高类之间的耦合性
今日总结:
今天晚上做题的时候突然对static和构造函数有了新的领悟,然后看到继承的开始。
通过这几天的学习,发现学习java知识是慢慢领悟的过程,当天讲的不能马上明白,要在课后慢慢去思考才能逐渐的明白。