Java 面向对象(二)

简介: 掌握构造方法的定义格式、调用时机、构造方法的重载、构造方法的私有化意义 掌握匿名对象的概念及应用。 可以通过所学到的知识完成简单类的开发。

🔭学习内容


掌握构造方法的定义格式、调用时机、构造方法的重载、构造方法的私有化意义

掌握匿名对象的概念及应用。

可以通过所学到的知识完成简单类的开发。


✈️目录


🔭1、构造方法

🔭2、匿名对象

🔭3、实例讲解一类设计分析


🔭1、构造方法

✂️定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。


✂️概念:构造方法是一种特殊的“成员方法”。


在面向对象程序中构造方法的主要作用是为类中的属性初始化。


✂️定义格式:


class 类名称{
     访问权限 类名称(类型1 参数1,类型2 参数2,…){
          程序语句;
          …               / /构造方法没有返回值
     }
}


✂️构造方法的声明注意以下几点:


  • ✒️构造方法的名称必须与类名称一致。
  • ✒️构造方法的声明处不能有任何返回值类型的声明。
  • ✒️不能在构造方法中使用return返回一个值。
class Demo{
  public Demo(){}       //无参构造方法
}


只要是类就必须存在构造方法,在Java中如果一个类中没有明确地声明一个构造方法,则在编译时会直接生成一个无参数的、什么都不做的构造方法


✂️关于构造方法的几点说明:

  • ☘️构造方法的调用是在创建一个对象时使用new操作进行的
  • ☘️如果不写构造方法,会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。一般情况下,我们自定义的类都要手动给出无参构造方法。接口不允许被实例化,所以接口中没有构造方法
  • ☘️构造方法的访问权限一般为default(默认,什么都不写)、private、public3种。不能被static、final、abstract和native修饰
  • ☘️构造方法可以被重载。构造方法在初始化对象时自动执行,一般不能显式地直接调用,当同一个类存在多个构造方法时,编译系统会按照参数个数以及参数类型来自动对应完成构造函数的调用


✂️关于构造方法的使用范例如下:


class Person{
  private String name;              //声明姓名属性 
  private int age;                  //声明年龄属性
  public Person(){}                 //定义无参构造方法
  public Person(String name){       //定义有一个参数的构造方法
    this.setName(name);
  }
  public Person(String name,int age){ //定义两个参数的构造方法
    this.setName(name);
    this.setAge(age);
  }
  public void tell(){               //取得信息的方法
   System.out.println("姓名:" + getName() +",年龄:"+ getAge());   // this 强调该方法是本类中的方法,可不写
  }
  public String getName(){
   return name;
  }
  public void setName(String n){
   name=n;
  }
  public int getAge{
   return age;
  }
  public void setAge(int a){
   if(a>0 && a<150){
     age=a;
   }
  }
}
public class Demo{
  public static void main(String[] args){
    Person p=new Person("张三");  //创建并实例化对象
    p.tell();
  }
}


🔭2、匿名对象

✂️定义:匿名对象就是没有明确给出名字的对象。一般匿名对象只使用一次,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。


✂️匿名对象:

new Person(“张三”,30).tell();

此处没有任何栈内存引用它,所以此对象使用一次之后就等待被垃圾收集机制回收。


✂️匿名对象的作用:匿名对象基本上都是作为其他类实例化对象的参数传递的


🔭3、实例讲解一类设计分析

✂️下面来写一程序,以巩固之前所学知识:


(1)根据要求写出类所包含的属性。


(2)所有的属性都必须进行封装(private)。


(3)封装之后的属性通过setter和getter设置和取得。


(4)如果需要可以加入若干构造方法。


(5)再根据其他要求添加相应的方法。


(6)类中的所有方法都不要直接输出,而是交给被调用处输出。


题目:定义并测试一个名为Student的类,包括的属性有“学号"、“姓名"以及3门课程“数学”、“英语"和“计算机"的成绩,包括的方法有计算3门课程的“总分"、“平均分" 、“最高分”及“最低分”


✂️完整程序如下:


class Student {
    private String stuno;
    private String name;
    private float math;
    private float english;
    private float computer;
    public Student() {
    }
    public Student(String stuno, String name, float math, float english, float computer) {
        this.setStuno(stuno);
        this.setName(name);
        this.setMath(math);
        this.setEnglish(english);
        this.setComputer(computer);
    }
    public void setStuno(String s) {
        stuno = s;
    }
    public void setName(String n) {
        name = n;
    }
    public void setMath(float m) {
        math = m;
    }
    public void setEnglish(float e) {
        english = e;
    }
    public void setComputer(float c) {
        computer = c;
    }
    public String getStuno() {
        return stuno;
    }
    public String getName() {
        return name;
    }
    public float getMath() {
        return math;
    }
    public float getEnglish() {
        return english;
    }
    public float getComputer() {
        return computer;
    }
    public float Sum() {
        return math+english+computer;
    }
    public float Ave() {
        return this.Sum()/3;
    }
    public float Max() {
        float max=math;
        max=max > computer ? max : computer ;
        max=max > english ? max : english;
        return max;
    }
    public float Min() {
        float min = math;
        min=min<computer ? min : computer;
        min=min<english ? min : english;
        return min;
    }
}
public class Demo{
    public static void main(String[] args){
        Student stu=new Student("123","张三",89.0f,76.0f,80.0f);
        System.out.println("学号:"+stu.getStuno());
        System.out.println("姓名:"+stu.getName());
        System.out.println("数学成绩:"+stu.getMath());
        System.out.println("英语成绩:"+stu.getEnglish());
        System.out.println("计算机成绩:"+stu.getComputer());
        System.out.println("总分:"+stu.Sum());
        System.out.println("平均分:"+stu.Ave());
        System.out.println("最高分:"+stu.Max());
        System.out.println("最低分:"+stu.Min());
    }
}


✂️运行结果:

学号:123
姓名:张三
数学成绩:89.0
英语成绩:76.0
计算机成绩:80.0
总分:245.0
平均分:81.666664
最高分:89.0
最低分:76.0


目录
相关文章
|
6天前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
52 1
|
17天前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
38 0
|
2月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
3月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
|
5月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
116 0
|
7月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
10月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
108 1
|
11月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
93 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
11月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
185 2