JAVA小记3(第三周)

目录

一、静态和静态代码块

 二、面向对象——继承性

三、内部类

四、单例模式

五、final关键字

六、抽象类和抽象方法

七、接口


一、静态和静态代码块

Ⅰ、静态

1.和类相关的属性称之为静态属性

2.和类相关的方法称之为静态方法

3.静态语法就是在属性和方法前增加static关键字

如以下代码:

public class PersonTwo {
    static String mName;//在类的属性前面加static
    static void sayHello(String name){//在类的方法前面加static
        System.out.println("Hello "+name);
    }
}

静态属性和方法不属于任何一个对象,可通过类名直接调用,如上面代码,如果要调用sayHello方法,在main方法中输入PersonTwo.sayHello("张三");即可调用PersonTwo类中的sayHello方法。

注意:静态方法中用到的属性和方法也必须是静态的。

 原因:先有类再有对象、

非静态成员只有对象能调用,而静态成员可用类名直接调用,通过类名调用静态方法时,对象不一定是存在的,如果静态方法中使用了非静态成员,而非静态成员只有对象才能调用,这时就会报错。

通过这个我们可以知道,为什么要在main方法前加static关键字进行修饰

静态成员在类加载时就被加载到方法区里,main方法由java解释器调用,这时还没有任何对象产生,因此,main方法成了程序的“入口”

Ⅱ、静态代码块

语法:static{

}

类信息加载完成后,会自动加载静态代码块

 二、面向对象——继承性

二、继承

类存在父子关系:子类可以直接获取到父类的成员属性和成员方法。

:类的继承只能是单继承,不支持多继承。一个类只能有一个父类,不能存在多个父类,一个父类可以有多个子类。

语法:class 类名 extends 父类名{ }

在子类中,如果子类的属性和方法名和父类的一致,可用super和this关键字区分,super表示上一级的对象,即父类,this表示当前类的对象。

三、内部类

//所谓的外部类,就是在源码中直接声明的类

//所谓的内部类,就是在类中声明的类

//Java不允许外部类使用private,protected修饰

//因为内部类可以看作外部类的属性,所以需要构建外部类对象才可以使用

下面是一段声明内部类的代码:

public class JavaStudyThree {
    public static void main(String[] agrs){
    OutClass outclass=new OutClass();
    OutClass.InClass inclass=outclass.new InClass();
    }
}
class OutClass{
    public class InClass{
        
    }
}

四、单例模式

①如果一个类的构造过程十分的复杂,而且需要经过多个步骤,如果可以直接从外部构建对象的话,可能会缺失一些必要的东西,导致对象随时出现问题。

②对象的构建比较消耗资源,可能会占用较大的内存空间,不想在外部频繁的创建。

这时,需要创建一个特殊的类,无论在外面构建多少次对象,都是指同一个对象。

public class JavaStudyThree {
    public static void main(String[] agrs){
    User user1=User.getInstance();
    User user2=User.getInstance();
    User user3=User.getInstance();
    //user1、user2、user3都是指同一个对象
    }
}
class User{
    private static User user=null;
    private User(){

    }
    public static User getInstance(){
        if(user==null){
            user=new User();
        }
        return user;
    }
}

像这种有套路的代码编写方式称为代码的设计模式,以上代码有个单独的模式名称,称为单例模式,但是这段代码在多线程场景下会出现问题,在这里暂时不讨论。

五、final关键字

在JAVA中提供了一种语法,数据一旦初始化之后就不能修改,使用关键字final

一般将于final修饰的变量称之为常量,或者叫不可变变量

①final可以修饰变量:

变量的值一旦初始化后无法修改

②final可以修饰属性:

final如果用来修饰属性,那么JVM无法自动进行初始化,需要自己进行初始化,属性值不能发生变化一般将于inal修饰的变量称之为常量,或者叫不可变变量

③final可以修饰方法:这个方法不能被子类重写

④final可以修饰类:这样类就没有子类

⑤final可以修饰方法的参数:一旦修饰,参数就无法修改

注:final不能修饰构造方法

六、抽象类和抽象方法

我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类

  • 抽象方法:没有方法体的方法
  • 抽象类:包含抽象方法的类

注意:Ⅰ.含有抽象方法的类一定是抽象类,抽象类中不一定含抽象方法。

           Ⅱ.final和abstract不能同时使用

抽象类:abstract class 类名{}

抽象方法:abstract 返回值类型 方法名(参数){}

子类可以继承抽象类,如果抽象类中含有抽象方法,子类需要重写抽象方法,将方法补充完整。

七、接口

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口:interface 接口名{}

//接口是抽象的,接口的方法是抽象的,接口的属性必须要是具体的、静态的,访问权限必须是公共的。

//接口可以继承其他接口,支持多继承

//类的对象需要遵循接口,在Java中,这个遵循称之为实现,类需要实现接口,而且可以实现接口。

实现接口:class 类名 implements 接口名{}

下面是接口的一个案例:

public class JavaStudyThree {
    public static void main(String[] agrs){
        Computer computer=new Computer();
        Light light1=new Light();
        computer.usb1=light1;
        Light light2=new Light();
        computer.usb2=light2;
        computer.powerSupply();
    }
}
interface USBInstance{

}
interface USBSupply extends USBInstance{
    public void powerSupply();
}
interface USBReceive extends USBInstance{
    public void powerReceive();
}
class Computer implements USBSupply{
    public USBReceive usb1;
    public USBReceive usb2;
    public void powerSupply(){
        System.out.println("电脑提供电源");
        usb1.powerReceive();
        usb2.powerReceive();
    }
}
class Light implements USBReceive{
    public void powerReceive(){
        System.out.println("电灯接收能源");
    }
}

接口比较抽象,更详细的可以参考JAVA基础——接口(全网最详细教程)_刘扬俊的博客-CSDN博客

本周的学习到此结束了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁢挽歌º

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值