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类来进行声明接收。


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





相关文章
|
15天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
15天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
15天前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
32 2
|
15天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
|
3天前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
11天前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!
|
28天前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
java202303java学习笔记第二十三天-初识内部类2
java202303java学习笔记第二十三天-初识内部类2
40 0
java202303java学习笔记第二十四天-静态内部类1
java202303java学习笔记第二十四天-静态内部类1
42 0
java202303java学习笔记第二十四天-静态内部类1
java202303java学习笔记第二十四天-静态内部类1
34 0