首页 > 编程语言 >狂神说java基础——面向对象编程

狂神说java基础——面向对象编程

时间:2022-11-03 21:22:44浏览次数:42  
标签:java void class 面向对象编程 println 狂神 方法 public out

面向对象编程(oop)

1、什么是面向对象(00)

  • 面向过程:线性思维
  • 面向对象:分类思维

​ 本质:以类的方式组织代码,以对象的形式阻止(封装)数据

  • 三大特性:封装,继承,多态

2、回顾方法的定义

方法的定义

  • 修饰符
  • 返回值类型
 /*
    * 修饰符 返回值类型 方法名(...){
    *   方法体
    *   return 返回值;
    * }
    * 返回值类型和返回值一一对应
    * */
    public  String haibai(){
        return "hello,海摆";
    }
  • break:跳出Switch,结束循环

方法的调用

  • 静态方法
  • 非静态方法
  • 形参和实参
  • 值传递和引用传递
  • this关键字

3、 回顾方法的调用

  • 递归

创建静态方法时,直接调用即可

image-20220718190659056

当创建非静态方法时,需要先将这个类进行实例化

image-20220718190525334

  • 静态方法和非静态方法

如果是先存着去调用不存在的东西会报错,反之

//是和类一起加载的 先存在
public  static void a(){

}
//类实例化之后才存在的  后存在
public  void b(){
        a();
}
  • 实参

//这里实际参数要和形式参数类型要一一对应

image-20220719090716387

4、类与对象

右边通过定义属性,左边对haibai进行实例化后,有输出结果,而没有实例则输出默认值

image-20220719130038326

无参构造

image-20220719165047334

有参构造

image-20220719165901020

有参无参快速创建alt+ins

5、封装

属性私有,get/set

1.提高程序安全性,保护数据

2.隐藏代码的实现细节

3.统一接口

4.系统可维护增加了

image-20220722110405994

6、继承

父类Person 子类Student

image-20220722112735560

调用say方法

image-20220722112823503

super

super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个

2.super必须只能出现在子类的方法或者构造方法中

3.super和this不能同时调用构造方法

image-20220722152251924

和this不同点:

this:本身调用这个对象、没有继承也可以使用、本类的构造

super:代表父类对象的引用、只能在继承的条件下才能使用、父类的构造

7、方法重写

  • 有static时 静态方法调用类
public class B {

    public static  void test(){

        System.out.println("B=>test");
    }
}
public class A extends B{


    public static void test() {

        System.out.println("A=>test");
    }
}
public static void main(String[] args) {
    A a = new A(); //Alt+enter
    a.test();
    
    B b=  new A(); 
    b.test();
}
//结果为
A=>test
B=>test
  • 没有静态方法时,调用对象
    • 也就是没有static时只跟左边有关
public class B {

    public   void test(){
        System.out.println("B=>test");
    }
}
public class A extends B{


    public  void test() {

        System.out.println("A=>test");
    }
}
public static void main(String[] args) {
    A a = new A(); //Alt+enter
    a.test();

    B b=  new A();//子类重写了父类的方法
    b.test();

}
//结果为
A=>test
A=>test

重写:需要有继承关系,子类重写父类的方法

​ 1.方法名必须相同

​ 2.参数列表必须相同

​ 3.修饰符:范围可以扩大但不能缩小 public>protected>default>private

​ 4.抛出的异常:范围 可以被缩小,但不能扩大 ClassnotfoundException--> Exception(大)

重写,子类的方法和父类必要一致,方法体不同!

为什么需要重写:

​ 父类的功能,子类不一定需要,或者不一定满足

alt+insert ; override

8、多态

public class Person {
    
}
public class Student extends Person{

}
public static void main(String[] args) {
    //Student 能调用的方法都是自己或者继承父类的
    Student s1 = new Student();
    
     //父类型可以指向子类,但不能调用子类的方法  
    Person s2=  new Student();
    
     Object s3 = new Student();

}
  • 注意事项:

    • 1.多态是方法的多态,属性没有多态

    • 2.父类和子类:有联系,类型转换异常!ClasscastException

    • 3.存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1= new son();

      • (1) static 方法,属于类,它不属于实例
      • (2)final 常量;
      • (3)private 方法;

9、Static关键字详解

  • 静态属性属于类,为所有对象所共享

  • 非静态方法可以调用静态方法,静态方法不可调用静态方法

  • 输出

    • 静态代码块
    • 匿名代码块
    • 构造方法
  • 被final修饰的类无法被继承

  • 静态导入包

import static java.lang.Math.PI; // 静态导入包
public class Person {
	{
		// 代码块 创建对象时自动创建,在构造器之前,赋初始值
		System.out.println(“匿名代码块”); 
	}

	static {
		// 静态代码块,用于初始化,在类加载时执行
		System.out.println(“静态代码块”); 
	}
	public Person()
	{
		System.out.println(“构造方法”); 
	}
}

// ================
Person p1 = new Person();
System.out.println(“--------------”); 
Person p2 = new Person();


10、抽象类

//抽象类
public abstract class Action {
    //abstract,抽象方法,只有名字,没有方法的实现
    public abstract void dosomething();
     //抽象类里可以有普通方法
    public void run(){
        
    }
}

  • 抽象类所有的方法,继承了它的子类,都必须要重写它的方法

public  class H extends Action{
    @Override
    public void dosomething() {
        
    }

  • 或者
public abstract  class H extends Action{
    
}
  • abastract修饰方法,则该方法为抽象方法
    • abstract修饰类,则该类为抽象类
  • 抽象类不能用new关键字来创建对象,它用子类来继承
    • 抽象方法只有方法的声明,没有方法的实现,它用子类实现
  • 抽象类可以没有抽象方法,但有抽象方法的类需要声明为抽象类
    • 抽象类可以写普通方法
  • 子类继承抽象类,必须实现抽象类没有实现的抽象方法,否则子类也要声明抽象类
  • 抽象类存在构造函数
  • 抽象类就是用来封装,多态地增强代码的可扩展性

11、接口的定义与实现

//class 替换为interface
public interface Userservice {

    //接口中的所有定义的方法都是抽象的
    void add(String name);
    void update(String name);
    void delete(String name);
    void query(String name);
}

public interface Timeservice {
    void timed();
}
//实现接口的类,就需要重写接口的方法
public class Userservicelmpl  implements  Userservice,Timeservice{
    @Override
    public void add(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timed() {

    }
}

1.关键字interface

2.比较

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都可以
  • 接口:只有规范,自己无方法可写,约束和实现分离

3.接口

  • 所有定义方法默认都是抽象的public absteact
  • 可以多继承
  • 就是规范,定义的一组规则
  • 不能被实例化,没有构造方法
  • 必须重写接口中的方法

12、内部类

1.成员内部类

public class Outer {
    //定义一个私有属性
    private  int id=10;

    //定义外部类的方法
    public void out(){
        System.out.println("这是外部类的方法");
    }

    //定义内部类方法
    public class inner{

        public void in(){
            System.out.println("这是内部类方法");
        }

        //获得外部类的私有属性
        public void getID(){
            System.out.println(id);
        }

    }


}
public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.out();

        Outer.inner inner = outer.new inner();
        inner.in();
        inner.getID();
    }
}

2.静态内部类

//在上方的基础上 class前面添加static  则为内部类
//定义内部类方法
    public  static class inner{
			public void in(){
        System.out.println("这是内部类方法");
    }
}

3.局部内部类

public class Outer {
//局部内部类
public  void method(){
    class  Inner{
        public void in(){
            
      	  }
   	 	}
	}
}

4.匿名内部类

public static void main(String[] args) {
    //没有名字初始化类,不用讲实例保存到变量中
    new apple().eat();
}
static class apple{
    public void  eat(){
        System.out.println("eat");
    }

}

13、捕获和抛出异常

  • ctrl+alt+t 代码块

  • 最高异常:Throwable

  • 其次:error和Exception

  • 异常处理的五个关键字 try、catch、finally、throw、throws

    • try:监控区域
    • catch:捕获异常
    • finally:都将会执行的语句
    • throw和throws:抛出异常
public class Test {
    public static void main(String[] args) {
        int a=1;
        int b=0;
        try {
            System.out.println(a/b);
        } catch (Error e) {
            System.out.println("程序出错");
        } catch (Exception e) {
            System.out.println("Exception");
        } catch (Throwable e) {
            System.out.println("Throwable");
        } finally {
            System.out.println("finally");
            //finally可以不要,
        }
        
        
    }
    public void a(){
        b();
    }
    public void b(){
        a();
    }
}

public class Test2 {
    public static void main(String[] args) {
        try {
            new Test2().tt(1,0);
        } catch (Exception e) {
            System.out.println("发现异常");
        }
    }
    //方法中,处理不了这个异常,方法上抛出异常
    public  void tt(int a,int b) throws  ArithmeticException{
        if (b==0){
            throw new ArithmeticException();//主动抛出异常
        }

    }
}

标签:java,void,class,面向对象编程,println,狂神,方法,public,out
From: https://www.cnblogs.com/DuPengBG/p/16855872.html

相关文章

  • Java集合精选常见面试题
    前言博主只是这篇文章的搬运工,为了加强记忆自己梳理了一遍并扩展了部分内容。集合拓展链接:集合概述&集合之Collection接口-至安-博客园(cnblogs.com)Java集合概览......
  • 面向对象编程 多态
    多态静态多态性,重载重载:同一个方法中有多个相同名称的方法,但参数不一样。在编译阶段(程序未运行的时候),函数之间就产生了一对一的关系。减少函数的命名,多个相同的函数可......
  • Java基础面试题整理
    一、何为面向对象面向对象简单来说就是一种编程方式,也可以说是一种思维方式,面向对象会注重一件事情的参与者(对象)、以及各自需要做什么动作。而面向过程则是更注重一件事情......
  • JavaEE#JCA
    概述jca依赖jta,也就是javax.resource-api依赖javax.transation-api。javax.resourcejavax.resource.ccijavax.resource.spijavax.resource.spi.endpointjavax.resource.......
  • 如何写一个给自己的框架写一个优雅的Java Config模块
    发博词工作时间长一点的工程师,平时的“工作生活”中肯定免不了写一些大大小小的框架和中间件。最近在看SpringSecurity的源码,由于这个框架要解决的问题比较多、复杂且零碎,......
  • JAVA中输入数字,然后再逆序输出来
    一、问题描述:就是我们现在输入一些数字,然后我们将输入的数字,倒着再输出出来。实现代码如下:importjava.util.Scanner;publicclassni_sort{publicstaticvoid......
  • 面向对象编程二
    动静态方法1.什么是动态和静态动态就是绑定给对象的方法直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入,类调用则有几个形参就传几个实参;静态方法就是......
  • java 读取 hdf5 文件数据
    importstaticjava.util.stream.Collectors.joining;importjava.io.File;importjava.lang.reflect.Array;importjava.util.ArrayList;importjava.util.Arrays;......
  • ES的java端API操作
    首先简单介绍下写这篇博文的背景,最近负责的一个聚合型的新项目要大量使用ES的检索功能,之前对es的了解还只是纯理论最多加个基于postman的索引创建操作,所以这次我得了解在ja......
  • Java 语音基础知识点 笔记
    Java语音基础知识点笔记(1)什么是变量?变量分为哪几类?String是最基本的数据类型吗?char型变量中能不能储存一个中文汉字?为什么?赋值语句“floatf=3.4;"是否正确?(2)Java中有没......