Java学习笔记 07、面向对象—重要知识点(一)

简介: Java学习笔记 07、面向对象—重要知识点(一)

一、main方法介绍


main():作为程序的入口,是一个普通的静态public方法,虚拟机中执行会去找main()方法,若不存在就会报错,存在即执行。


main方法能与控制台进行交互。


public class Main{
    public static void main(String[] args){
  }
}


其中的args参数我们也可以进行赋值并输出:


①命令行中赋值并输出


首先编译成字节码文件,接着输入java Main "参数1" 1 2 3 后面空格分隔的参数值会赋予到args中,就可以对其进行操作了!!


②IDEA中设置参数


左上角选择你当前运行的java源代码名称—Edit Configuration



在Program argumnets中设置参数即可




二、static关键字


static:共享的,可以修饰属性、方法、代码块、内部类(无构造器)。


修饰属性:此属性就是类中的静态属性,创建多个对象都有一份共享的属性,一个对象修改的话,其他对象拥有的属性也会更改。

静态变量会随着类的加载而加载,放置在缓存区(方法区的静态域),可以通过类.静态变量直接调用,而不用先创建实例再获取。

类的加载早于对象的加载,加载时间发生在如实例化对象、类名调用静态变量的几个情况下。由于类的加载只有一次,静态变量在内存中只会存在一份。

修饰方法:也就是静态方法,随着类的加载而加载,通过类.静态方法调用。

一般常量也使用static修饰。

注意点:静态方法中,不能使用this,super关键字,并且静态方法中不能调用非静态的属性及方法。(因为静态方法是随着类加载而加载,实例化对象则是在运行阶段)。


相关设计模式:单例模式



三、类成员—代码块


类的成员:方法、属性、构造器、内部类、代码块


代码块:也称为Block、初始化块,分别非静态代码块与静态代码块。


语法:


class Person{
    //非静态代码块
    {
  }
    //静态代码块
    static{
    }
}


非静态代码块:可在创建属性时,对属性进行初始化

创建实例时执行,每创建一次就会执行一次。

若是有多个代码块,按照顺序执行。

可包裹静态、非静态的属性及方法。

静态代码块:为静态属性赋值

随着类的加载而执行,只执行一次

若是有多个静态代码块,根据顺序执行(可合在一个静态代码块中)

只能包裹静态属性与方法

使用场景:连接数据库时,加载properties配置文件。



四、final关键字


final:表示常量,最终的意思


final可修饰结构:类、方法、类变量、局部变量


修饰类:此类不能被其他类所继承。

修饰方法:此方法不能被重写。

修饰变量:此变量为常量,可初始化位置有直接初始化、代码块中初始化、构造器中初始化(只能有一处)。

修饰局部变量

形参:表示常量,在方法中不可对其重新赋值(调用方法时会传参)。

方法中参数:表示常量,不可二次赋值。


初始化举例:下面演示的是不同变量,同一个变量赋过值后无法再重新赋值


class Person{
    public final double MONEY = 20; //1.直接赋值
    public final int NAME;  
    public final String MAJOR;
    public Person(){
        NAME = 10;  //2.在构造器中赋值
    }
    {
        MAJOR = "数学";   //3.在代码块中赋值
    }
}


final使用于方法实例:Object的getClass方法public final native Class<?> getClass();


final使用于类实例:常用类String,public final class String


final使用于变量:String类中的参数private final char value[];



五、abstract关键字


介绍abstract

abstract:可修饰类与方法


修饰类:抽象类,一般来说在开发中会提供抽象类子类,让子类进行实现


无法进行实例化

一定有构造器,方便子类对象实例化时候调用

修饰方法:抽象方法


有抽象方法的必定是抽象类

抽象方法只有方法的声明,没有方法体,例如public abstract void walk();

若子类继承了抽象类,必须重写父类所有抽象方法,否则该子类依旧是抽象类

注意点:①abstract不能修饰属性,构造器等结构。②不能修饰private属性,静态方法,final方法



抽象类

抽象类:主要是用来模型化那些父类无法确定全部实现,而由其子类提供具体实现对象的类。


下面就是一个简单的子类继承抽象类实现抽象方法:目的是要是实现抽象类调用其walk方法


abstract class Person{
    public abstract void walk();
}
class Student extends Person{
    @Override
    public void walk() {
        System.out.println("student走路中.....");
    }
}
public class Main {
    public static void main(String[] args){
        Person student = new Student();
        Person.walk();//student走路中.....
    }
}


匿名抽象类


匿名抽象类:对于抽象类我们是无法直接实例化的,但我们可以通过匿名抽象类的方式来进行实例化,需要注意的是这个实例化对象并非是该抽象类,可以看成其匿名子类,实现抽象方法即可使用。


好处:当我们需要使用某个抽象类中的方法时,一般来说要重新定义一个类来继承抽象类并实现方法,之后将该子类实例化使用实现方法,这里可以直接创建一个匿名子类对象,直接重写方法用。


使用的例子还是上面抽象类里的例子:


abstract class Person{
    public abstract void walk();
}
public class Main {
    public static void main(String[] args){
        //多态:创建匿名抽象类并实例化
        Person person = new Person() {
            @Override
            public void walk() {
                System.out.println("student走路中.....");
            }
        };
        person.walk();//student走路中.....
    }
}


这里使用多态来进行方法调用。



应用场景

需求描述及不合理方案



描述:上面几个动物原本是根据不同的科类划分继承的,现在需要给几个动物如cat、dog这几个动物家养的几个小动能,如何设计最合理?


这里有几个不太合理方案:当做示例


方案一:直接将宠物方法加在Animal类中。

优点:其下所有动物类都可以马上继承其方法,其他新增加的动物也会取得同样行为。

缺点:让原本不是宠物的动物赋予了其方法,很不合理!

方案二:与方案一相同,加Animal类中,不过这里添加的是抽象方法。

优点:其他所有动物类都会重写该方法,定义合理的动作。

缺点:注意其他动物例如老虎狮子,根本完全没必要有并且重写其方法。

方案三:直接把放方法写入到指定的动物身上。

优点:避免其他动物有其宠物的行为。

缺点:对于相同的行为方法,不一样的家宠动物会出现例如doFriendly()、beFriendly()方法,调用时可能会出现不同方法调用。

理清需求以及合理方案


需求描述总结:


一种可以让宠物行为只应用到宠物身上方法

确保所有的宠物的类都有相同的方法定义的方法。

可以应用到多态

合理方案:在cat、dog之上创建一个抽象类名为Pet,并且创建带有宠物的方法,这样指定动物就能够继承其方法,并且还能够使用多态,通过Pet类来进行声明接收。


相关关系见下图,真的秒呀:





相关文章
|
1月前
|
存储 设计模式 SQL
[Java]知识点
本文涵盖Java编程中的多个知识点,包括静态与动态代理、基本数据类型转换、设计模式、异常处理、类加载、序列化、ORM框架、IPv4地址分类、编译与解释等。文章详细介绍了每个知识点的原理和使用方法,并提供了相关示例和注意事项。
43 16
[Java]知识点
|
16天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
19 1
|
1月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
43 13
|
29天前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
24 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
1月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
45 0
|
2月前
|
安全 Java 编译器
Java基础-知识点(二)
Java基础-知识点(二)
13 0
|
2月前
|
存储 缓存 安全
Java基础-知识点(一)
Java基础-知识点(一)
21 0
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
19 0
|
5月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
76 0
下一篇
DataWorks