Java面向对象(类和对象)(自己学习整理的资料)

news2024/9/25 6:26:46

目录

一.面向对象思想

二.类和对象

三:定义类的步骤

四.创建对象

五.用Java代码写一个简单的登录系统

练习

六.关于类的方法

七.类的无参无返回值方法

八.方法的返回值

练习

关于方法调用问题

九.全局变量和局部变量

十.笔记


一.面向对象思想

  • 就只关注参与这个事件的对象,不关心具体过程,具体过程打散到一个或者多个对象,在main函数中我们可以组合出具体过程。

二.类和对象

  • 把具有相同属性和方法的对象归为一个类(class)。

  • 类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。

  • 类不代表具体的事物,而对象表示具体的事物。(ps:对象是现实生活中看得见,摸的着的具体的事物)。

三:定义类的步骤

  • 定义类名
  • 编写类的属性
  • 编写类的方法

练习:

编写一个表示小狗的简单类Dog——它表示的不是一只小狗,而是狗这个物种。

public class lian 
    //静态属性
    String name;//名称
      int age;//年龄
              //动态属性  行为   方法
        System.out.println("我的名字是"+name + ".我今年" + age+"岁了");
    }
}

四.创建对象

  • 语法

类名 对象名 = new 类名();

引用对象成员:使用"."进行以下操作

引用类的属性:对象名.属性

应用类的方法:对象名.方法名()

Dog dog = mew Dog();
dog.name = "小黑";
dog.age = 5;
dog.sayHello();
public class Dog {
    //main函数是程序的入口函数
    public static void main(String[] args) {
       //在Java中新建一个狗狗对象
Dog dog = new Dog();
      dog.name = "小黑";
      dog.age = 5;

      Dog dog2 = new Dog();
      dog2.name = "小白"
              dog2.age = 3;
        dog1.sayHello();
        dog2.sayHello();
    }
}

练习

  • 定义一个Car类,有品牌brand,颜色color,和价格price三个属性,有一个介绍自己的方法名称为show(),请使用程序定义该类,并创建一个对象。
public class color {
    //品牌
    String brand;
    //颜色
    String color;
    //价格
    int price;

    //自我介绍的方法
    public void show(){
        System.out.println("汽车的品牌为:"+brand+",汽车的颜色为:"+color+",汽车的价格为:"+price);
    }
}

五.用Java代码写一个简单的登录系统

  • 首先定义一个User类存初始的用户名和密码
  • 用户自定义的类也是一种类型(ps:不属于Java中的基本类型,属于引用类型)
package lian;

public class UserInfo {
   String username;
   String password;
}
  •  在写一个面向的对象的登录页面
package lian;

import java.util.Scanner;

public class ren {
    public static  void main(String[] args) {
        UserInfo[] users = new UserInfo[50];
        UserInfo info = new UserInfo();
        info.username = "li";
        info.password = "666666";
        users[0] = info;

        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String uname = input.next();
        System.out.println("请输入密码:");
        String upwd = input.next();
        boolean flag = false;//登录失败

        //判定是否成功登录
        for (int i = 0;i < users.length;i++){

            if (users[i] != null && users[i].username.equals(uname) && users[i].password.equals(upwd)){
                     flag = true;
                     break;
            }
        }
        if (flag == true){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
    }
}

练习
  • 创建一个Movie类,有电影名称、导演、演员三个属性。写一个打印所有属性信息的方法。

先编写一个定义的类作为引用类型

package lian;

public class Movie {
String moviename;
String director;
String[] actors = new String[5];
public void initData(){
    actors[0] = "张三";
    actors[1] = "李四";
    actors[2] = "王五";
    actors[3] = "赵二";
    actors[4] = "刘一";
      }

      //写一个介绍电影信息的方法
    public void show(){
        System.out.println("电影名称为:" + moviename);
        System.out.println("电影导演为:" + director);
        System.out.println("电影的参演人员有:");
        //列举
        for (int i = 0;i < actors.length;i++){
            System.out.println(actors[i]);
        }
    }
}

再用一个main类打印输出

package lian;

import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
Movie movie = new Movie();
movie.moviename = "人生";
movie.director = "李";
movie.initData();
       //调用自我介绍的方法
       movie.show();
        }
    }

ps:这样用的话作为引用类中的数组其实是有bug的,如果有两部电影调用演员,那么就会调用相同的演员数组。

可做如下更改:

  • 首先在引用类型中注释掉
  • 然后在主函数类中更改代码
package lian;


public class lian {
    public static void main(String[] args) {
Movie movie = new Movie();
movie.moviename = "人生";
movie.director = "李";
movie.actors[0] = "张三";
movie.actors[1] = "李四";
movie.actors[2] = "王五";
movie.actors[3] = "赵二";
movie.actors[4] = "刘一";
//movie.initData();
       //调用自我介绍的方法
       movie.show();
        System.out.println("------");
        //创建第二部电影
        Movie movie2 = new Movie();
        movie2.moviename = "我的人生";
        movie2.director = "人";
        movie2.actors[0] = "为";
        movie2.actors[1] = "国";
        movie2.actors[2] = "家";
        movie2.actors[3] = "谋";
        movie2.actors[4] = "福";
        movie2.show();
        }
    }

ps:这样一来就可以两个不同的电影有不同的演员。

六.关于类的方法

  • 定义一个方法就是定义了一个功能。也就是类可以有什么能力,可以做到什么事情。

  • 定义类方法的五要素:

  1. 访问修饰符

  2. 返回值类型

  3. 方法名

  4. 参数列表

  5. 方法体

ps:(图截取自视频老师讲解)

七.类的无参无返回值方法

package lian;

public class Dog {
    public void run(){
        System.out.println("小黑在跑");
    }
    public void bark(){
        System.out.println("小黑在叫");
    }
}
package lian;

public class dog2 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.run();
        dog.bark();
    }
}

八.方法的返回值

  1. 如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该返回值的类型。

  2. 如果方法没有返回值,返回值的类型应为void(不能省略)。

练习
  • 从键盘接收三门课分数,计算三门课的平均分和总成绩,编写成绩计算类实现功能。

先定义一个引用类型

package lian;

public class Calc {
    int chinese;
    int math;
    int english;
        public int getTotal () {
            int totalScore = chinese + math + english;
            return totalScore;
        }
            public double getAvgScore () {
                //第一种求平均分的方法
               // double result = (chinese + math + english) / 3.0;
               // return result;
                //第二种平均分的方法
                return getTotal()/3.0;
            }
        }

再用一个main主函数类

package lian;

import java.util.Scanner;

public class kecheng2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
      Calc calc = new Calc();
        System.out.println("请输入语文成绩:");
        calc.chinese = input.nextInt();
        System.out.println("请输入数学成绩:");
        calc.math = input.nextInt();
        System.out.println("请输入英语成绩:");
        calc.english = input.nextInt();

        int total = calc.getTotal();
        //调用一下求平均分的方法
        double avgScore = calc.getAvgScore();
        String result = String.format("%.2f", avgScore);
        System.out.println("总分为:"+total);
        System.out.println("平均分为:"+result);

    }
}
关于方法调用问题
  • 如果两个方法不在同一个类中,我们先要实例化对象,然后再通过对象名.方法名()调度。

  • 如果两个方法在同一个类中,那么我们直接通过方法名称调用即可。

九.全局变量和局部变量

  • 变量声明的位置决定变量作用域

全局变量是指定义在任何函数之外的变量,也就是不被任何“{函数体}”所包含,作用域(有效范围)是从定义变量的位置开始到源文件(整个程序)结束

全局变量是在类中定义的变量,它不属于任何一个方法。所有方法都可以共性(读取值,修改值),并且全局变量不赋初值,系统会给默认值。

全局变量特点:系统会给默认值。如果是整型,默认值为0。

局部变量是指在一个函数(包括main函数)内部定义的变量,它只在本函数内部有效,其他函数不能使用这些变量,函数的参数也就是局部变量。

局部变量:在方法中定义的变量,出了方法所在的{}它就死亡了。

十.笔记

package lian;

public class lian {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        if (str1 == str2) {
            System.out.println("=");
        }
    }
}

ps:固定的两个格式(或者说两个静态的字符串)可以输出“=”,但不建议这样用,容易出问题。

package lian;

import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
        String str1 = "abc";
        Scanner input =new Scanner(System.in);
        String str2 = input.next();
        if (str1 == str2) {
            System.out.println("=");
        }
    }
}

ps:这样用动态的Scanner输入方式后,结果就不是“=”了,这时的比较就要用equals了。equals既可以识别动态也可以识别静态,因此为了程序的健壮性我们最好引用equals。

  • 在Java中判定一个对象是否为空用的是null。
  • 在Java中判定两个字符串是否相等,用的是equals()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科研绘图系列:R语言分组堆积图(stacked barplot)

文章目录 介绍加载R包导入数据数据预处理画图导出数据系统信息介绍 堆积图是一种数据可视化图表,它通过将不同类别的数据以堆叠的形式展现在同一个图表中,来展示各个类别之间的相对大小和它们之间的总和。堆积图可以是柱状图、条形图或面积图的形式,其中每个堆叠的块或区域…

西门子S7-1200 PLC的配方功能

配方相关指令介绍工控人加入PLC工业自动化精英社群 配方功能主要使用4个指令&#xff0c;READ_DBL和WRIT_DBL用于对配方数据块的读写&#xff0c;RecipeExport和RecipeImport用于配方数据块和CSV文件之间的转化&#xff0c;下面分别介绍这4个指令的使用。 READ_DBL / / / / …

MMD模型及动作一键完美导入UE5-Blender方案(三)

1、下载并安装blender_mmd_tools插件 1、下载并安装Blender,Blender,下载Blender3.6,下载太新的版本可能会跟blender_mmd_tools不匹配 2、github下载blender_mmd_tools:https://github.com/UuuNyaa/blender_mmd_tools/ 3、Edit->Preference->Add ons->Install F…

【LinuxC高级】汇总

ls ls -l&#xff1a;显示文件的详细信息 ls -a&#xff1a;显示隐藏文件 ls -lh&#xff1a;文件大小单位显示 ls -i&#xff1a;显示文件的inode号 修改密码 passwd 用户名 su 用户名 -----> 用户名 su ----> 如果不加用户名&#xff0c;默认切换到超级用户 cd cd 路径…

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

MyBatis—Plus 快速上手【后端 22】

MyBatis-Plus 使用入门指南 前言 在Java的持久层框架中&#xff0c;MyBatis因其灵活性和易用性而广受欢迎。然而&#xff0c;随着项目规模的扩大&#xff0c;MyBatis的一些重复性工作&#xff08;如CRUD操作&#xff09;开始显得繁琐。为了解决这一问题&#xff0c;MyBatis-Pl…

Flink 高可用原理

Flink 高可用原理 Flink JobManager 高可用 加强了 Flink 集群防止 JobManager 故障的能力。 此特性确保了 Flink 集群将始终持续执行你提交的作业。 JobManager 高可用一般概念是指&#xff0c;在任何时候都有 一个领导者 JobManager&#xff0c;如果领导者出现故障&#xff…

失踪人口回归(明天开始继续更新学习内容)

从明天开始继续更新个人学习经验及收获&#xff0c;可能会直接从C入门开始&#xff0c;总结一下C在C的基础上增加的新语法。这篇就当作水贴算了&#xff0c;大家别点赞&#xff0c;留点赞给明天的文章&#xff0c;哈哈 我是安姐的修沟...........

html TAB、table生成

1. 代码 <!DOCTYPE html> <head> <meta charset"UTF-8"> <title>Dynamic Tabs with Table Data</title> <style> /* 简单的样式 */ .tab-content { display: none; border: 10px solid #ccc; padding: 30px; mar…

二叉树的基本概念(上)

文章目录 &#x1f34a;自我介绍&#x1f34a;简介&#x1f34a;树的定义树中的专业术语树的分类 &#x1f34a;二叉树的特性讲解 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介…

【Redis入门到精通六】在Spring Boot中集成Redis(含配置和操作演示)

目录 Spring Boot中集成Redis 1.项目创建和环境配置 2.基本操作演示 Spring Boot中集成Redis Spring社区也自定义了一套Redis的客户端&#xff0c;与jedis的操作方式有所差异&#xff0c;Spring中把每个类型的操作都单独封装了起来。下面就让我来带大家了解如何在Spring Boot…

JavaScript动态数据可视化

一、引言 在前端开发中&#xff0c;JavaScript无疑是最核心的技术之一。它能够处理各种交互逻辑&#xff0c;实现复杂的功能。本文将通过一个动态数据可视化的案例&#xff0c;展示如何使用JavaScript实现复杂功能。动态数据可视化能够将大量数据以直观、生动的方式呈现&#…

从 Tesla 的 TTPoE 看资源和算法

特斯拉的 ttpoe 出来有一段时间了&#xff0c;不出所料网上一如既往的一堆 pr 文&#xff0c;大多转译自 演讲 ppt 和 Replacing TCP for Low Latency Applications&#xff0c;看了不下 20 篇中文介绍&#xff0c;基本都是上面这篇文章里的内容&#xff0c;车轱辘话颠来倒去。…

Python网络爬虫获取Wallhaven壁纸图片(源码)

** 话不多说&#xff0c;直接附源码&#xff0c;可运行&#xff01; ** import requests from lxml import etree from fake_useragent import UserAgent import timeclass wallhaven(object):def __init__(self):# yellow# self.url "https://wallhaven.cc/search?co…

【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路

文章目录 C string 类的模拟实现&#xff1a;从构造到高级操作前言第一章&#xff1a;为什么要手写 C string 类&#xff1f;1.1 理由与价值 第二章&#xff1a;实现一个简单的 string 类2.1 基本构造与析构2.1.1 示例代码&#xff1a;基础的 string 类实现2.1.2 解读代码 2.2 …

电池快充协议芯片

1&#xff1a;18650充电快充规则 电池知识 | 东莞市恒帝电子科技有限公司 (heldee.com) 锂电池快速充电知识【钜大锂电】 (juda.cn)18 锂电池和18650锂电池能不能快速充电&#xff0c;四种充电方式讲解 | 东莞市恒帝电子科技有限公司 (heldee.com) 2&#xff1a;国产厂家 …

数据库课程 CMU15-445 2023 Fall Project-2 Extendible Hash Index

0 实验结果 tips:完成项目的前提不需要一定看视频 1 数据结构&#xff1a;扩展哈希 解释下这张图&#xff1a; 图中header的最大深度2&#xff0c;directory最大深度2&#xff0c;桶的容量2。 最开始的时候只有一个header。 插入第一个数据&#xff0c;假设这个数据对应的哈希…

安谋科技发布全新自研“玲珑”多媒体处理器

当前&#xff0c;受视频直播、AR/VR、智驾智舱等新兴应用场景和使用人群的飞速增长&#xff0c;视频编解码及显示处理领域呈现出旺盛需求&#xff0c;进而带动了下游设备数量不断攀升。以智能汽车为例&#xff0c;根据盖世汽车研究院的产业报告显示&#xff0c;预计2025年国内车…

【GeekBand】C++设计模式笔记4_Strategy_策略模式

1. “组件协作”模式 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”&#xff0c;“组件协作”模式通过晚期绑定&#xff0c;来实现框架与应用程序之间的松耦合&#xff0c;是二者之间协作时常用的模式。典型模式 Template MethodStrategyObserver / Event 2.…