首页 > 编程语言 >Java学习面向对象Day01

Java学习面向对象Day01

时间:2023-08-07 20:12:11浏览次数:38  
标签:Java String 构造方法 对象 Day01 面向对象 Student public name

面向对象Day01

一、名词解释

  1. OO:面向对象(Oriented Object)

    定义:是一种以对象为导向,围绕对象来开发应用程序的软件开发方法。

  2. OOA: 面向对象分析

  3. OOD:面向对象设计

  4. OOAD: 面向对象的分析与设计

  5. OOP:面向对象编程 ----------你们所参与的

二、现实世界中的类和对象

  1. 先要明确一件事先有现实世界中的事和物,才有计算机中的类和对象
  2. 生活中的对象是实实在在存在的事物,是人们在思考或者行动时作为目标的实物 物质
  3. 我们认识世界会将相同的行为或者特征的事物进行分类,形成了类,类:是一种脑子中形成的概念 意识
  4. 抽象
    1. 定义:抽象是从具体的实物中抽出共同的特征(属性)和行为(方法)的过程
    2. 程序设计的核心机制
    3. 面向对象四大特征之一(面向对象三大特征:封装继承多态, 抽象)

问题:先有类还是先有对象

现实世界一定是先有了对象, 然后根据对象抽象出了类的概念

​ 三、计算机中的类和对象

  1. 定义

    1. 类:类是对具有相同属性和方法的实物的抽象。
    2. 类中包括
      1. 属性:事物拥有的静态特征
      2. 方法:事物拥有的行为
    3. 对象:对象是类的具体体现,是类的实体/实例;
  2. 类和对象的关系

    1. 类是对象的模板,对象是类的实例(抽象与具体的关系)
      1. 一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这个定义的实体,因此类的对象关系就是抽象与具体的关系
      2. 类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例
  3. 如何定义一个类

    • 定义类名

    类名遵循帕斯卡命名规则(大驼峰命名规则),每一个单词的首字母都大写,如类名Student;

    public  class  类名{
    
    }
    
    • 定义类的属性

    通过留在类的主体中定义变量来描述类所具有的静态特征(属性),这些变量称为类的成员变量

    • 定义类的方法

    通过在类中定义方法描述类所具有的行为,这些方法称为类的成员方法

    • 创建对象

      类是一种数据类型,用这个类型创建的变量也叫对象。

      因为类是引用数据类型,所以创建对象需要使用new关键字

      类名 对象名 = new 类名();
      
      Student st = new Student();
      
    • 对象调用属性和方法

      对象名.属性;
      对象名.方法名();
      
      st.name = "张三";
      st.eat();
      
      

    封装

    一、成员变量和局部变量

    区别 成员变量 局部变量
    定义范围 定义在类中,成员变量也叫实例变量,全局变量。 也叫属性 定义在方法或者语句中
    作用范围 作用在整个类中 作用在对应的方法或者语句中
    内存位置 存储在堆内存,并且在堆内存中被赋予初始值 存储在栈内存中,而且没有默认值,需要手动赋值
    生命周期 在对象被创建的时候创建,在对象被销毁的时候销毁 在方法或者语句执行的时候被创建,方法或者语句执行完毕就被销毁

二、匿名对象

  1. 所谓的匿名对象就是指没有名字的对象

  2. 注意事项

    1. 因为匿名对象没有名字,所以只能在创建的时候使用一次
    2. 匿名对象可以作为参数进行传递
    3. 匿名对象如果没有作为参数传递,那么在占内存中是没有引用的
  3. 代码示例

package com.oracle.object2;

public class StudentDemo {
    public static void main(String[] args) {
        // 这个对象的名字是s1
        Student s1 = new Student();
        s1.name = "张三";
        s1.study("Java");
        s1.play();


        //创建了一个Student对象
        //注意:像这种没有名字的对象称之为匿名对象
        new Student().study("Phon");
        new Student().play();
        new Student();

        //new几次就会创建几个对象,每一个对象的地址都是不一样的
        //System.out.println(new Student());
        //System.out.println(new Student());
        //System.out.println(new Student());


        //匿名对象可以作为参数传递
        printName(new Student());
    }


    public static void printName(Student st){
        System.out.println(st.name);
    }
}

三、构造方法

  1. 构造方法:在类中 方法名与类名一致,没有返回值,连void也灭有的方法

  2. 构造方法也叫构造函数,也叫构造器

  3. 作用

    1. 创建对象, 创建对象就是调用该类的构造方法。
    2. 对属性进行初始化
  4. 如果在类中没有手动给定构造方法,那么在编译的时候会自动添加一个默认的无参构造函数

  5. 如果在类中手动添加了构造函数,那么在编译的时候就不会再默认提供无参构造

  6. 构造方法虽然没有返回值类型但是依然可以使用return,使用return的作用是为了避免一些不合理的数据被赋值给属性

  7. 构造方法可以被重载

    package com.oracle.object2;
    
    /**
     * 司机类
     */
    public class Driver {
        String name;
        int age;
        char gender;  //性别
        String no;    // 驾驶证号
    
        /**
         * 无参构造
         * 用于创建对象
         */
        public Driver() {
        }
    
        public Driver(String a, int b, char c, String d) {
            name = a;
            if (b < 18 || b >= 70) {
                System.out.println("年龄不合适,司机最小年龄18,最大年龄69");
                return;
            }
            age = b;
            gender = c;
            no = d;
        }
    
        public void driver(){
            System.out.println(name+"今年"+age+"岁了,正在开车");
        }
    }
    
    

四、this关键字

  1. 因为在Java中所有的非静态方法和属性只能通过对象来调用,而在本类中如果先要调用本类中的方法或者属性,并没有本类的对象,所以需要使用this关键字来表示当前对象,调用属性和方法。

  2. this代表笨重中对象的引用,可以认为是一个虚拟的对象,用于在类内调用本类中非静态的方法和非静态的属性

  3. this语句表示在本类的构造方法中调用其他形式的构造方法。this语句必须放在构造方法的第一行。

    package com.oracle.object4;
    
    /**
     * 司机类
     */
    public class Driver {
        String name;
        int age;
        char gender;  //性别
        String no;    // 驾驶证号
    
        /**
         * 无参构造
         * 用于创建对象
         */
        public Driver() {
    
        }
    
        public Driver(String name) {
            this.name = name;
        }
    
        public Driver(String name,int age){
            this.name = name;
            this.age = age;
        }
    
        public Driver(String name ,int age,char gender){
           this(name,age);
            this.gender = gender;
        }
    
        public Driver(String name ,int age,char gender,String no){
            //自动调用本类中符合形式的构造方法
            //this(String,int,char) --->  Strudent(String ,int ,char)
            //this语句必须放在构造方法的第一行
            this(name,age,gender);
            this.no = no;
        }
    
    }
    
    

五、代码块

  1. 构造代码块

    1. 所谓的构造代码块是指定义在类中的{} 包裹起来的代码,也称为初始化代码块

    2. 无论调用哪个构造方法,构造代码块都会执行

    3. 构造代码块是在创建对象的时候先于构造方法执行的

      package com.oracle.object4;
      
      /**
       * 婴儿类
       */
      public class Baby {
          String name;
      
          /**
           * 在类中用{}括起来的代码成这位构造代码块/初始化代码块
           * 无论调用哪个构造方法,这个代码块都会执行
           * 构造代码块是先于构造方法执行的
           */
          {
              this.cry();
              this.eat();
          }
      
          public Baby(){
              System.out.println("~~~~~~");
      //        this.eat();
      //        this.cry();
          }
      
          public Baby(String name){
              this.name = name;
      //        this.cry();
      //        this.eat();
          }
      
          public void cry(){
              System.out.println("这个婴儿在哭");
          }
      
          public void eat(){
              System.out.println("这个婴儿在吃奶");
          }
      }局部代码块
      

2.局部代码块

  1. 所谓局部代码块,是指定义在方法中的{} 抱起来的代码

  2. 作用是限制变量的生命周期从而提高栈内存的利用率

    package com.oracle.object4;
    
    /**
     * 局部代码块
     */
    public class LocalCodeDemo {
        public static void main(String[] args) {
            System.out.println("Hello");
            
            {
                //限制了变量的使用范围,缩短了生命周期
                int i = 5;
    
                int j = 7;
    
                System.out.println(i + j);
            }
    
            System.out.println("~~~~");
        }
    }
    

六、面向对象的三大特征

  1. 封装
  2. 继承
  3. 多态
  4. 抽象(部分承认)

七、封装

  1. private : 私有的, 被private修饰的属性和方法只能在本类中使用,在其他任意类中都不可以使用。

  2. 封装是面向对象方法的重要原则,就是把对象的属性和方法结合为一个整体,并尽可能隐藏对象内部的实现细节。封装是一种信息隐藏技术。

  3. 形式

    1. 方法:方法其实就是封装的一种行间形式,通过将某段常用的代码提出而形成的一种新的形式

    2. 属性私有化,方法公开化 创建一个类,将类中的属性由private修饰,并且提供可以对外访问的方法, setXXX, getXXX

      setXXX用于设置属性值, getXXX用于获取属性值

    3. 内部类,内部类作为一种封装的形式,是为了让我们的代码结构更加紧凑。

  4. 作用:

    1. 提高了代码的复用性(降低了代码的冗余),安全性,使代码更加紧凑
    2. 使属性私有化 ------- 信息隐藏,更加安全
    3. 良好的封装能降低耦合度。
  5. 练习:封装一个学生类, 成员变量: 学号,姓名,性别,家庭住址 并测试1

八、一个标准的JavaBean

一个标准的JavaBean包含

  1. 私有化的属性

  2. 无参构造

  3. 全参构造

  4. get方法

  5. set方法

    package com.oracle.object5;
    
    /**
     * 学生类, 一个标准的JavaBean
     */
    public class Student {
        private String no;
        private String name;
        private char gender;
        private String address;
    
        public Student() {
        }
    
        public Student(String no, String name, char gender, String address) {
            this.no = no;
            this.name = name;
            this.gender = gender;
            this.address = address;
        }
    
        public String getNo() {
            return no;
        }
    
        public void setNo(String no) {
            this.no = no;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public char getGender() {
            return gender;
        }
    
        public void setGender(char gender) {
            this.gender = gender;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    
    

标签:Java,String,构造方法,对象,Day01,面向对象,Student,public,name
From: https://www.cnblogs.com/swz20020720/p/17612607.html

相关文章

  • Java学习面向对象Day02
    面向对象Day02-继承一、继承1.1生活中的继承皇位继承------------------------儿子不需要打江山,可以直接坐江山努尔哈赤---------------------东三省做主的范围东三省皇太极-----------------------继承的努尔哈赤可以直接对东三省做主自己打下了内外蒙古做主......
  • Java中的深拷贝浅拷贝
    在计算机内存中,每个对象都有一个地址,这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时,实际上是将该对象的地址赋值给变量。因此,如果我们将一个对象复制到另一个变量中,实际上是将对象的地址复制到了这个变量中。浅拷贝是指将一个对象复制到另一个变量中,但是只......
  • 【Java】从头开始的Java复健day2
    用的书:《Java从入门到精通》day1(3.1-3.3):【Java】从头开始的Java复健day1第三章Java语言基础3.4运算符赋值运算符=如果一个表达式中有两个以上的“=”,会从最右方的“=”开始处理算术运算符加法+减法-乘法*除法/(0不能当除数)取余%自增自减++a:先+1再使用a--a......
  • Java中抽象类和接口
    修饰符:抽象类中的抽象方法可以有public、protected和default这些修饰符,而接口中默认修饰符是public。不可以使用其它修饰符。一般来说,接口中不考虑Java8中default方法,没有实现的代码。抽象类可以定义抽象方法和非抽象方法。 接口和抽象类的职责不一样。接口主要用于制定规范。......
  • JavaHTTP心跳:服务器与客户端实时连接的实现方式
    JavaHTTP心跳:服务器与客户端实时连接的实现方式在网络通信中,实时连接是一种至关重要的功能。它允许服务器与客户端之间保持持久的通信信道,实现快速、高效的数据传输。对于Java开发者来说,实现服务器与客户端之间的实时连接可以通过JavaHTTP心跳技术来实现。本文将介绍如何利用Java......
  • Java HTTP请求封装的方法及实现
    JavaHTTP请求封装的方法及实现在Java开发中,我们经常需要与服务器进行数据交互,发送HTTP请求是其中常见的一种方式。为了简化开发过程,我们可以封装HTTP请求的方法,让调用者只需要关注业务逻辑而不用关心底层的细节实现。本文将介绍一种基于Java的HTTP请求封装方法及其实现。JavaHT......
  • Java HTTP多线程下载实现方法
    JavaHTTP多线程下载实现方法在如今互联网高速发展的时代,对于下载来说,速度是一个非常重要的因素。而多线程下载是一种提高下载速度的常见方法。本文将介绍如何使用Java编程实现HTTP多线程下载功能。JavaHTTP多线程下载实现方法一、背景知识在开始实现之前,我们需要了解一些基本......
  • JavaSwing实现验证码功能
    JavaSwing实现验证码功能在Web应用程序开发中,验证码(CAPTCHA)是一种常见的安全措施,用于防止自动化机器人和恶意软件对网站进行攻击。本文将介绍如何使用JavaSwing来实现验证码功能,以帮助您加强Web应用程序的安全性。JavaSwing实现验证码功能一、什么是验证码?验证码是一种通过人......
  • Java Web Service Get请求使用指南
    JavaWebServiceGet请求使用指南在当今互联网时代,WebService已经成为了现代软件开发中不可或缺的一部分。而Java作为一种广泛使用的编程语言,自然也提供了丰富的工具和库来支持WebService的开发。本文将为大家介绍如何使用Java编程语言进行WebService的Get请求。JavaWebserv......
  • 【金九银十面试冲刺】Android岗面试题每日分享——Java篇
    一、Java异常机制中,异常Exception与错误Error区别这道题想考察什么?在开发时需要时候需要自定义异常时,应该选择定义Excption还是Error?编写的代码触发Excption或者Error分别代表什么?考察的知识点Java异常机制考生应该如何回答在Java中存在一个Throwable可抛出类,Throwable有两个重要的......