Java类成分和四大属性

2023-05-16

Java类定义和四大属性

  • Java类成分
    • 面向对象思想概述
    • 类的五大成分
    • 类的构造器
    • 封装
    • this关键字
    • static关键字
    • 成员变量的分类和访问
  • 继承(extends)

Java类成分

面向对象思想概述

Java是一种面向对象的高级编程语言。
面向对象:是用代码去高度模拟现实世界的事物,从而让软件为任 务处理业务,为人类服务。
高级语言:代码看起来很像人类的自然语言。

面向对象最重要的两个概念:对象

类是相同事物共同特征的描述。类只是学术上的一个概念并非真实存在的,只能描述一类事物。
对象:是真实存在的实例。 实例==对象。
结论:有了类和对象就可以描述万千世界所有的事物。必须先有类才能有对象。

定义类:
格式:修饰符 class 类名{
}

注意:
1.类名的首字母建议大写。满足驼峰式.StudentNameCode。
2.一个Java代码文件中可以定义多个类。但是按照规范还是建议一个Java文件定义一个类。
3.一个Java代码文件中,只能有一个类是用public修饰的,而且public修饰的类名必须成为当前Java代码的文件名称。

类的五大成分

类中的成分:有且仅有五大成分(五大金刚)
    修饰符 class 类名{
        // 1.成员变量(Field):  描述类或者对象的属性信息的。
        // 2.成员方法(Method): 描述类或者对象的行为信息的。
        // 3.构造器(Constructor): 初始化一个对象返回引用。
        // 4.代码块(后面介绍)
        // 5.内部类(后面介绍)
    }
    类中有且仅有这五种成分,否则代码报错!
    注意:只要不是这5大成分放在类下就会报错
public class ClassDemo {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("铁扇公主");
        System.out.println(s1.getName()); // 铁扇公主

        Student s2 = new Student("铁扇公主");
        System.out.println(s2.getName()); //  铁扇公主
    }
}

class Student{
     // System.out.println("hello"); //不是五大成分,报错
    private String name ;
    public Student(){
    }
    public Student(String name){
        this.name = name ;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

class Animal01{
}

类的构造器

格式:修饰符 类名(形参列表){

         }
作用:初始化类的一个对象返回。

构造器的分类:无参数构造器,有参数构造器
构造器的注意点:一个类默认自带一个无参数构造器,但是如果写了有参数构造器那么
默认的无参数构造器就消失了,此时如果还需要用无参数构造器就需要自己从新写一个。
构造器初始化对象的格式:

类名 对象名称 = new 构造器;
Student s = new Student();

无参数构造器的作用:初始化一个类的对象(使用对象的默认值初始化)返回。
有参数构造器的作用:初始化一个类的对象(可以在初始化对象的时候为对象赋值)返回。

注意:一个类默认会自带一个无参数构造器,即使不写它也存在,但是如果一个类
它写了一个构造器,那么默认的无参数构造器就被覆盖了!!

封装

面向对象的三大特征:封装继承多态
是Java语言的风格。是我们在开发中必须遵循的,即使毫无意义,代码还是要按照这个风格写!!

封装的作用:

  1. 可以提高安全性。
  2. 可以实现代码的组件化。

封装的规范:

  1. 建议成员变量都私有:用private修饰。
    private修饰的方法,成员变量,构造器等只能在本类被直接访问。
  2. 提供成套的getter+setter方法暴露成员变量的取值和赋值。
    public修饰符,是公开的意义。

小结:

封装的核心思想:合理隐藏,合理暴露。
封装已经成为Java代码的风格,即使代码毫无意义,还是要按照封装的规范写代码。
成员变量私有,提供getter+setter方法。

this关键字

this关键字的作用:

  1. this代表了当前对象的引用。
  2. this关键字可以用在实例方法和构造器中。
  3. this用在方法中,谁调用这个方法,this就代表谁。
  4. this用在构造器,代表了构造器正在初始化的那个对象的引用。
package com.itheima._01知识回顾;

/**
    目标:this关键字知识回顾。
    this关键字的作用:
        this代表了当前对象的引用。
        this关键字可以用在实例方法和构造器中。
        this用在方法中,谁调用这个方法,this就代表谁。
        this用在构造器,代表了构造器正在初始化的那个对象的引用。
 */
public class ThisDemo02 {
    public static void main(String[] args) {
        Animal a1 = new Animal();
        a1.setName("金毛");
        System.out.println(a1.getName());

        Animal a2 = new Animal("泰迪",3,'公');
        System.out.println(a2.getName());
    }
}

class Animal{
    private String name;
    private int age ;
    private char sex ;
    //ptg 插件
    public Animal() {
    }
    public Animal(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return this.name;  // a1.name  this有时候可以省略不写!!
    }

    /**
     * 设置
     * @param name
     *  a1.setName("金毛");
     */
    public void setName(String name) {
        // 谁调用这个方法,this就代表谁!!!
        this.name = name; //  a1.name = 金毛
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return sex
     */
    public char getSex() {
        return sex;
    }

    /**
     * 设置
     * @param sex
     */
    public void setSex(char sex) {
        this.sex = sex;
    }

}

static关键字

引入:
我们之前定义了很多成员变量(name , age , sex)其实我们只写了一份,但是发现每个对象都可以用,就说明Java中这些成员变量或者方法是存在所属性的。
有些是属于对象的,有些是属于类本身的。
Java是通过成员变量是否有static修饰来区分是类的还是属于对象的
static = = 静态 = = 修饰的成员(方法和成员变量)属于类本身的。

按照有无static修饰,成员变量和方法可以分为:
成员变量:

  • 静态成员变量(类变量)
    有static修饰的成员变量称为静态成员变量也叫类变量,属于类本身的,直接用类名访问即可。
  • 实例成员变量
    无static修饰的成员变量称为实例成员变量,属于类的每个对象的,必须用类的对象来访问。

成员方法:

  • 静态方法
    有static修饰的成员方法称为静态方法也叫类方法,属于类本身的,直接用类名访问即可。
  • 实例方法
    无static修饰的成员方法称为实例方法,属于类的每个对象的,必须用类的对象来访问。

小结

  • 成员变量有2种
  1. 有static修饰的属于类叫静态成员变量,与类一起加载一次,直接用类名调用即可。
  2. 无static修饰的属于类的每个对象的叫实例成员变量,与类的对象一起加载,对象有多少个,实例成员变量就加载多少份。必须用类的对象调用。
  • 成员方法有2种:
  1. 有static修饰的属于类叫静态方法,直接用类名调用即可。
  2. 无static修饰的属于类的每个对象的叫实例方法,必须用类的对象调用。

成员变量的分类和访问

按照有无static修饰成员变量分为:
(1)静态成员变量:有static修饰,属于类本身与类一起加载一次,直接用类名访问即可。
(2)实例成员变量:无static修饰,属于类的每个对象的,必须先创建对象,再用对象来访问。
成员变量的访问语法:

  • 静态成员变量访问:
    类名.静态成员变量
    对象.静态成员变量。(不推荐)
  • 实例成员变量的访问:
    对象.实例成员变量。

小结:
静态成员变量有static修饰,属于类本身,与类加载一次,因为只有一份所以可以被类和类的对象共享访问。
注意:不建议用对象访问静态成员变量,静态成员变量直接用类名访问即可!!!
实例成员变量,无static修饰,属于类的对象的,必须先创建对象,然后用对象来访问!

public class Student{
    // 1.静态成员变量:有static修饰,属于类本身,直接用类名访问即可!
    public static String schoolName = "黑马";
    // 2.实例成员变量:无static修饰,属于类的对象的,必须用对象访问!
    private String name;
    private int age ;

    public static void main(String[] args) {
        // 1.类名.静态成员变量
        System.out.println(Student.schoolName);
        // 注意:同一个类中访问静态成员变量可以省略类名不写
        System.out.println(schoolName);

        // 2.对象.实例成员变量
        //System.out.println(Student.name); // 报错!
        Student swk = new Student();
        swk.name = "孙悟空";
        System.out.println(swk.name);
        System.out.println(swk.age);

        // 3.对象.静态成员变量(不推荐)
        // 静态成员变量属于类,直接用类名访问即可。
        System.out.println(swk.schoolName);
    }
}

public class Student {
    // 0.实例成员变量。
    private String name;
    private int age ;

    // 1.静态方法:有static修饰,属于类,直接用类名访问即可!
    public static void inAddr(){
        System.out.println("我们都在天河区吉山村happy的学习Java!");
    }

    // 2.实例方法:无static修饰,属于对象,必须用对象访问!
    public void eat(){
        System.out.println(name + "已经"+age+"岁,在吃好吃的!!");
    }

    public static void main(String[] args) {
        // a.类名.静态方法
        Student.inAddr();
        // 注意:在同一个类中访问静态成员可以省略类名不写!!
        inAddr();

        // b.对象.实例方法
        // Student.eat(); // 报错了!
        Student zbj = new Student();
        zbj.name = "猪刚鬣";
        zbj.age = 1000;
        zbj.eat();

        // c.对象.静态方法(不推荐)
        zbj.inAddr();
    }
}

拓展(面试常考)
方法:实例方法,静态方法。
成员变量:实例成员变量,静态成员变量。

8种访问形式的问答

  1. 实例方法是否可以直接访问实例成员变量?可以的,因为它们都属于对象。
  2. 实例方法是否可以直接访问静态成员变量?可以的,静态成员变量可以被共享访问。
  3. 实例方法是否可以直接访问实例方法? 可以的,实例方法和实例方法都属于对象。
  4. 实例方法是否可以直接访问静态方法?可以的,静态方法可以被共享访问!
    --------------------------------------------------------------------
  5. 静态方法是否可以直接访问实例变量? 不可以的,实例变量必须用对象访问!!
  6. 静态方法是否可以直接访问静态变量? 可以的,静态成员变量可以被共享访问。
  7. 静态方法是否可以直接访问实例方法? 不可以的,实例方法必须用对象访问!!
  8. 静态方法是否可以直接访问静态方法?可以的,静态方法可以被共享访问!!
public class MethodFieldDemo {
    // 静态成员变量
    public static String schoolName = "黑马";
    // 实例成员变量
    private String name;

    // 静态方法
    public static void test(){
       // run(); // 报错了
       // System.out.println(name);
    }

    // 实例方法
    public void run(){
    }

    // 实例方法
    public void eat(){
        run();
        test();
        System.out.println(name);
        System.out.println(schoolName);
    }
}

继承(extends)

概述
继承是Java中一般到特殊的关系,是一种子类到父类的关系。
例如:学生类继承了人类。 猫类继承了动物类。

被继承的类称为:父类/超类。
继承父类的类称为:子类。
作用
“可以提高代码的复用”,相同代码可以定义在父类中。
然后子类直接继承父类,就可以直接使用父类的这些代码了。
(相同代码重复利用)
特点
子类继承了一个父类,子类就可以直接得到父类的属性(成员变量)和行为(方法)了。
格式

    子类 extends 父类{
    }

小结:
继承是子类到到父类的一种关系。
子类继承了一个父类,子类就可以直接得到父类的属性和行为了。
在Java中继承是 “is a” 的关系。Cat extends Animal:猫是一个动物。
在Java中,子类是更强大的,子类不仅继承了父类的功能,自己还可以定义自己的功能。

public class ExtendsDemo {

}

class Animal{

}

class Cat extends Animal{

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java类成分和四大属性 的相关文章

  • Ubuntu16.04终端执行`sudo apt-get update`遇到appstream问题

    Ubuntu 16 04 终端执行sudo apt get update遇到问题 E xff1a Problem executing scripts APT Update Post Invoke Success br 39 if usr b
  • Cloudflare5s盾破解|爬虫自动验证|解决方案

    一 什么是Cloudflare5s盾 Cloudflare是一个网站加速和安全服务提供商 Cloudflare 5s盾是指网站防御模式 xff0c 它可以防止恶意流量和攻击 xff0c 如DDoS SQL注入 XSS等 xff0c 保护网站
  • 若依Vue入门——服务器部署篇

    目录 前端 xff0c ruoyi ui 编译 部署 后端 xff0c ruoyi 使用若依前后端分离的Vue 43 Springboot脚手架 xff0c 进行编译与在Windows Server服务器上的部署 使用IDEA作为IDE 使
  • Spring启动流程解析(总)

    一 xff0c Spring启动流程概述 Spring的IoC容器在实现控制反转和依赖注入的过程中 xff0c 可以划分为两个阶段 xff1a 容器启动阶段 Bean实例化阶段 容器初始化 加载配置 分析配置信息 将Bean信息装配到Bea
  • Node,docker 中安装node.js

    1 启动docker服务 首先启动docker服务 systemctl start docker 2 获取node最新镜像 启动完成之后拉取node最新镜像 xff1a docker pull node 然后开始等待 xff0c 最后拉取完
  • 慎用!!! rm -rf 潜藏着巨大的危险!

    平时删除文件爱偷个懒 笔直 rm rf 过去就不想事了 今天碰到一个很意外的情况 以前也有碰到过 但总没留意到 在这里记下提醒自己 希望大家也多留个神 先说说 rm 的用法 官方的描述是这样的 rm 命令可以删除一个目录中的一个或多个文件或
  • 个人面试细节、技巧总结(没有面试题哦!)

    面试除了自身技能过硬外 xff0c 良好的沟通 xff0c 平和的心态 xff0c 细节的拿捏也都是额外的加分项 最后 xff0c 以些许运气加以点缀 xff0c offer 便八九不离十了 参加工作两年有余 xff0c 只大专文凭 xff
  • EFCore 实现连接MySQL并创建实体类

    EFCore 实现连接MySQL并创建实体类 所需文件版本 1 Pomelo EntityFrameworkCore MySql 2 2 0 2 Microsoft EntityFrameworkCore Tools 2 2 0 3 Pom
  • Win10设置文件夹背景色

    右键个性化 选择左侧的颜色 xff0c 根据自己的喜欢进行设置
  • 快速计算代码行小工具

    非常方便用于统计代码行的小工具叫line counter xff0c 使用以下命令获取工具 pip install line counter 使用 34 line 34 命令可以获取当前目录下的文件与行数统计 xff0c 效果如下 line
  • 协议栈设计_LwIP笔记

    文章目录 LWIP主进程工作链路层LWIP数据包收发函数框架ARP 地址解析协议 表ARP表查询IP层ICMP处理 Internet 控制报文协议 TCPIP Thread线程启动流程 tcpip thread主线程处理 LWIP主进程工作
  • VirtualBox虚拟机串口调试方法

    1 windows下调试virtualbox的虚拟机串口 2 Cannot open dev ttyS0 Permission denied解决 出现了Cannot open dev ttyS0 Permission denied提示字样
  • 基于STC89C51和L298N的42步进电机控制

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件 电机的转速 停止的位置只取决于脉冲信号的频率和脉冲数 xff0c 而不受负载变化的影响 xff0c 即给电机加一个脉冲信号 xff0c 电机则转过一个步距角 步进电机必须由双环形脉冲
  • python实现一个QQ群聊天机器人

    最近由于项目需求 xff0c 需要做个QQ群的聊天机器人用于回答咨询的问题 在这样的情况下 xff0c 我开始了QQ机器人的踩坑之旅 这个机器人需求就是在群里有人 64 机器人 43 问题时 xff0c 机器人通过检测信息是否有 64 之后
  • 使用python控制打印机

    Python安装win32api模块 xff1a pip install pypiwin32 一组扩展模块 xff0c 提供对许多Windows API函数的访问 http sourceforge net projects pywin32
  • python静默打印pdf

    span class token keyword import span win32api span class token keyword import span win32print span class token keyword d
  • 超简单!!小白级 PXE 实现无人值守批量安装教程

    author Tresser date 2017 4 9 03 50 此文较长 请细心看完 一定可以成功 实验环境 主机 CentOS 6 5 x86 虚拟机 准备工作 1 本地 yum 仓库 2 DHCP 服务器 3 TFTP 服务器 4
  • python 提示错误AttributeError: type object 'str' has no attribute '_name_'

    在做 Machine Learning in Action 书中的第三章绘制树形图时遇到了这个问题AttributeError type object 39 str 39 has no attribute 39 name 39 很明显是if
  • C++ IPC进程间的通信《C++多线程编程实战》

    临界值 xff1a 程序中能被访问共享内存的部分 2个CPP文件需要在同一个解决方案中分别创建2个项目 进程间通信示例 xff1a 程序一开始就有2个进程 xff0c 它们在一个普通窗口中完成绘制矩形的任务 2个进程相互通信 xff0c 一
  • C# 使用Newtonsoft.Json读写Json文件

    原文地址 xff1a https www cnblogs com LicwStack p 9522345 html 0 json文件 34 CAN 34 false 34 AccCode 34 4294901856 34 Id 34 768

随机推荐