Spring学习中用到的一些面向对象的知识

简介: Spring学习中用到的一些面向对象的知识

1. 构造方法

1.1 构造方法概述【理解】

构造方法是一种特殊的方法

作用:

创建对象 Student stu = new Student();

格式:

public class 类名{
修饰符 类名( 参数 ) {
}
}

功能:主要是完成对象数据的初始化

示例代码:

class Student {
    private String name;
    private int age;
    //构造方法
    public Student() {
        System.out.println("无参构造方法");
    }
    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
测试类
*/
public class StudentDemo {
    public static void main(String[] args) {
//创建对象
        Student s = new Student();
        s.show();
    }
}

1.2 构造方法的注意事项【理解】

1.构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法 如果定义了构造方法,系统将不再提供默认的构造


2.方法构造方法的重载


如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法


3.推荐的使用方式


无论是否使用,都手工书写无参数构造方法


4.重要功能


可以使用带参构造,为成员变量进行初始化


示例代码

/*
学生类
*/
class Student {
    private String name;
    private int age;
    public Student() {}
    public Student(String name) {
        this.name = name;
    }
    public Student(int age) {
        this.age = age;
    }
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
测试类
*/
public class StudentDemo {
    public static void main(String[] args) {
//创建对象
        Student s1 = new Student();
        s1.show();
//public Student(String name)
        Student s2 = new Student("林青霞");
        s2.show();
//public Student(int age)
        Student s3 = new Student(30);
        s3.show();
//public Student(String name,int age)
        Student s4 = new Student("林青霞",30);
        s4.show();
    }
}

1.3 标准类制作【应用】

需求:定义标准学生类,要求分别使用空参和有参构造方法创建对象,空参创建的对象通过setXxx赋值,有参创建的对象直接赋值,并通过show方法展示数据。

示例代码:

class Student {
    //成员变量
    private String name;
    private int age;
    //构造方法
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //成员方法
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
创建对象并为其成员变量赋值的两种方式
1:无参构造方法创建对象后使用setXxx()赋值
2:使用带参构造方法直接创建带有属性值的对象
*/
public class StudentDemo {
    public static void main(String[] args) {
//无参构造方法创建对象后使用setXxx()赋值
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);
        s1.show();
//使用带参构造方法直接创建带有属性值的对象Student s2 = new Student("林青霞",30);
        s2.show();
    }
}

2 static(应用)

static的概念

static关键字是静态的意思,可以修饰【成员方法】,【成员变量】

static修饰的特点

1. 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件

2. 可以通过类名调用当然,也可以通过对象名调用【推荐使用类名调用】

示例代码:

class Student {
    public String name; //姓名
    public int age; //年龄
    public static String university; //学校 共享数据!所以设计为静态!
    public void show() {
        System.out.println(name + "," + age + "," + university);
    }
}
public class StaticDemo {
    public static void main(String[] args) {
// 为对象的共享数据赋值
        Student.university = "CSDN";
        Student s1 = new Student();
        s1.name = "林青霞";
        s1.age = 30;
        s1.show();
        Student s2 = new Student();
        s2.name = "风清扬";
        s2.age = 33;
        s2.show();
    }
}

2.1 static访问特点(掌握)

static的访问特点

非静态的成员方法


能访问静态的成员变量


能访问非静态的成员变量


能访问静态的成员方法


能访问非静态的成员方法


静态的成员方法


能访问静态的成员变量


能访问静态的成员方法


总结成一句话就是: 静态成员方法只能访问静态成员


 最后与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用可以直接导入项目类文件之后类名调用方法,但是也可以实例化对象之后调用但是更推荐前者。


实例:

public class HelloWorld {
    // 定义静态变量score1
    static int score1 = 86;
    // 定义静态变量score2
            int score2 = 92; 
    // 定义静态方法sum,计算成绩总分,并返回总分
  public  static   int sum() { 
      HelloWorld hd=new HelloWorld(); 
     return score1+hd.score2;
  }
  public static void main(String[] args) {
        // 调用静态方法sum并接收返回值
    int allScore = HelloWorld.sum();
    System.out.println("总分:" + allScore);
  }
}

3.反射

3.1反射的概述【理解】

是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。

由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展

3.2获取Class类对象的三种方式【应用】

3.2.1三种方式分类

  1. 类名.class属性
  2. 对象名.getClass()方法
  3. Class.forName(全类名)方法

3.2.2示例代码

public class ReflectDemo {
    public static void main(String[] args) throws ClassNotFoundException {
//使用类的class属性来获取该类对应的Class对象
        Class<Student> c1 = Student.class;
        System.out.println(c1);
        Class<Student> c2 = Student.class;
        System.out.println(c1 == c2);
        System.out.println("--------");
//调用对象的getClass()方法,返回该对象所属类对应的Class对象
        Student s = new Student();
        Class<? extends Student> c3 = s.getClass();
        System.out.println(c1 == c3);
        System.out.println("--------");
//使用Class类中的静态方法forName(String className)
        Class<?> c4 = Class.forName("com.itheima_02.Student");
        System.out.println(c1 == c4);
    }
}

3.3反射获取构造方法并使用【应用】

3.3.1Class类获取构造方法对象的方法

方法分类

 

示例代码

public class ReflectDemo01 {
    public static void main(String[] args) throws ClassNotFoundException,
            NoSuchMethodException, IllegalAccessException, InvocationTargetException,
            InstantiationException {
//获取Class对象
        Class<?> c = Class.forName("com.itheima_02.Student");
//Constructor<?>[] getConstructors() 返回一个包含 Constructor对象的数组,
        Constructor对象反映了由该 Class对象表示的类的所有公共构造函数
// Constructor<?>[] cons = c.getConstructors();
//Constructor<?>[] getDeclaredConstructors() 返回反映由该 Class对象表示的类
        声明的所有构造函数的 Constructor对象的数组
        Constructor<?>[] cons = c.getDeclaredConstructors();
        for(Constructor con : cons) {
            System.out.println(con);
        }
        System.out.println("--------");
//Constructor<T> getConstructor(Class<?>... parameterTypes) 返回一个
        Constructor对象,该对象反映由该 Class对象表示的类的指定公共构造函数
//Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回
        一个 Constructor对象,该对象反映由此 Class对象表示的类或接口的指定构造函数
//参数:你要获取的构造方法的参数的个数和数据类型对应的字节码文件对象
        Constructor<?> con = c.getConstructor();
//Constructor提供了一个类的单个构造函数的信息和访问权限
//T newInstance(Object... initargs) 使用由此 Constructor对象表示的构造函数,
        使用指定的初始化参数来创建和初始化构造函数的声明类的新实例
        Object obj = con.newInstance();
        System.out.println(obj);
// Student s = new Student();
// System.out.println(s);
    }
}


目录
相关文章
|
1月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
8月前
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
298 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
5月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
665 2
|
7月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
184 20
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
10660 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
274 9
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
825 2
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
833 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
177 9
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
114 1