一、描述

  • 类是一种抽象的数据类型,它是对某一类事物整体的描述或定义,但是并不能代表某一个具体的事物。
  • 例如,我们生活中所说的词语:动物、植物、手机、电脑等等。这些也都是抽象的概念,而不是指的某一个 具体的东西。

二、类与对象的关系

  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是对对象的抽象
  • 从代码运行角度考虑是先有类后有对象,类是对象的模板。
  • 例如Person类、Pet类、Car类等,这些类都是用来描述或定义某一类具体的事物应该具备的特点和行为,而对象是抽象概念的具体实例,例如张三就是人的一个具体实例。
  • 在java中,没有类就没有对象,然而类又是根据具体的功能需求,进行实际的分析,最终抽象出来的。

示例:

/*
张三是引用类型变量,它指向一个Person对象,这个Person对象就是Person类的一个具体实例。
能够使用的是具体实例,而不是类。
类只是给对象的创建提供了一个参考的模板而已。
*/
Person zhangSan = new Person("张三", 20, "China");

三、'this'关键字


Ⅰ、'this'在类中的作用

  1. 区别成员变量和局部变量

    public class Student {
    private String name; public void setName(String name) {
    /* this.name表示类中的属性,name表示形式参数 */
    this.name = name;
    }
    }
  2. 调用类中的其他方法

    public class Student {
    private String name; public void setName(String name) {
    this.name = name;
    } public void print() {
    /*
    表示调用当前类中的setName方法。
    默认情况下,setName("tom")和this.setName("tom")的效果是一样的。
    */
    this.setName("tom");
    }
    }
  3. 调用类中的其他构造器

    public class Student {
    private String name; public Student() {
    /*
    调用一个参数的构造器,并且参数的类型是String。
    注意:
    this这种调用类中其他构造器的用法,只能在构造器中使用,普通的方法是不能用的。
    并且这种调用的代码只能出现在构造器中的第一句。
    */
    this("tom");
    } public Student(String name) {
    this.name = name;
    }
    }

Ⅱ、'this'在类中的意义

  • 'this'关键字在类中代表该类将来创建出的对象
  • 'this'关键字是在对象的内部来引用对象本身,所以'this'可以调用成员变量和成员方法。
  • 同一个类的不同对象都有一个属于自己的'this'。

示例:

/*
this和person打印的结果是一样的。
那么其实也就是变量person是从对象的外部来引用对象,而this是在对象的内部来引用对象本身。
*/
public class Person {
private String name; public Person() {
System.out.println("this = " + this);//this = com.conyoo.test.Person@5674cd4d
} public static void main(String[] args) {
Person person = new Person();
System.out.println("person = " + person);//person = com.conyoo.test.Person@5674cd4d
}
}

四、对象


Ⅰ、对象和引用的关系

  • 使用类类型、数组类型、接口类型声明出的变量,都可以指向对象,这种变量就是引用类型变量,简称引用
  • 引用'指向'对象。本质为引用保存了对象的地址值。
  • 在程序中,创建出对象后,直接使用并不方便,所以一般会用一个引用类型的变量去接收这个对象,这个就是所说的引用指向对象。
  • 对象和引用的关系,就如电视机和遥控器,风筝和线的关系一样。

Ⅱ、使用'new'创建与初始化对象

  • 使用'new'关键字创建与初始化对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用

示例:

/*
使用'new'关键字创建与初始化对象时程序内部执行的步骤:
1.为对象分配内存空间,将对象的实例变量自动初始化为默认值。
2.如果代码中实例变量有显式赋值,那么就将之前的默认值覆盖掉。
3.调用类中对应的构造器。
4.把对象内存地址值赋值给声明的变量。
*/
Person person = new Person();

五、构造器


Ⅰ、简介

  • 类中的构造器也称为构造方法,在进行对象创建的时候必须要调用。

特点:

  • 构造方法名必须和类的名字相同
  • 构造方法没有返回类型,也不能写void。

作用:

  • 使用'new'关键字创建对象的时候必须使用类的构造器
  • 构造器中的代码可以给对象中的属性进行初始化赋值

示例:

public class Person {
private String name; public Person() {
name = "张三";
}
}

Ⅱ、构造器重载

  • 除了无参构造器之外,很多时候我们还会使用有参构造器,在创建对象时候可以给属性赋值

示例:

public class Person {
private String name; public Person() {
name = "张三";
} public Person(String name) {
this.name = name;
}
}

Ⅲ、构造器间的调用

  • 使用'this'关键字,在一个构造器中,可以调用同一个类中另一个构造器的代码。
  • 'this'的这种用法不会产生新的对象,只是调用了构造器中的代码而已。一般情况下只有使用'new'关键字才会创建新对象。

示例:

public class Person {
private String name;
private Integer age; public Person() {
this.name = "张三";
this.age = 20;
} public Person(String name) {
this();
this.name = name;
}
}

Ⅳ、默认构造器

  • 在java中,如果我们在编写类的时候没有写构造器,那么java文件在编译之后也会自动的添加一个无参构造器,这个无参构造器也被称为默认的构造器。

注意:

  • 如果我们手动地编写了一个构造器,那么编译后就不会自动添加任何构造器了。

六、属性

  • 属性,或者叫成员变量,用于定义该类或该类对象包含的数据。

  • 属性作用范围是整个类体

  • 在定义属性时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

属性定义的格式:

/* 修饰符 */ 属性类型 属性名 /* = 初始值 */;

属性调用的格式:

  • 对象或对象的引用.属性名

七、方法

  • 方法是类和对象动态行为特征的抽象
  • 方法很类似于面向过程中的函数。
  • 面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。
  • 面向对象中,整个程序的基本单位是类,方法是从属于类或对象的。

方法定义的格式:

/* 修饰符 */ /* 返回值类型 */ 方法名 (/* 参数列表 */) /* 异常抛出类型 */{
/* 方法体 */
/* return语句 */
}

对象调用的格式:

  • 对象或对象的引用.方法名(参数列表)

Java基本概念:类的更多相关文章

  1. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  2. 基础知识(05) -- Java中的类

    Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...

  3. java问题:类的定义,对象的定义?

    java问题:类的定义,对象的定义? 类是一组数据和函数的集合,只是抽象的概念,它的作用就是生成对象,它生成对象后,就为这个对象分了一块存储区,类可以生成无限多个对象,每个对象都有自己的存储区,在类里 ...

  4. 【转】JAVA的StringBuffer类

    [转]JAVA的StringBuffer类    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...

  5. java 并发工具类CountDownLatch & CyclicBarrier

    一起在java1.5被引入的并发工具类还有CountDownLatch.CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它们都存在于ja ...

  6. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

  7. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  8. Java基础概念1

    一.Java数据类型 1.byte 字节型 1byte = 8bit 表示数范围:-2^7~2^7-1(-128~127): 2.short 短整型 2 byte = 16bit 表示数范围:-2^1 ...

  9. JDK1.8源码(一)——java.lang.Object类

    本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...

  10. JAVA线程概念

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

随机推荐

  1. 利用ELK构建一个小型的日志收集平台

    利用ELK构建一个小型日志收集平台 伴随着应用以及集群的扩展,查看日志的方式总是不方便,我们希望可以有一个便于我们查询及提醒功能的平台:那么首先需要剖析有几步呢? 格式定义 --> 日志收集 - ...

  2. 关于贪心算法的经典问题(算法效率 or 动态规划)

    如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...

  3. python+fiddler下载vip视频 && ts视频可合并

    如果你只想在线看视频可以去看这篇博客:python实现通过指定浏览器免费观看vip视频  先看一下我们程序运行的结果 我们要解析的接口就是(就是这个"接口+视频地址"可以解析出vi ...

  4. Gym 100796K Profact

    Alice is bored out of her mind by her math classes. She craves for something much more exciting. Tha ...

  5. ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015) G. It is all about wisdom (二分,单源最短路)

    题意:有\(n\)个点,\(m\)条边,只有当你的智力值大于这条边的\(w\)才能走,问在花费不超过\(k\)的情况下,从\(1\)走到\(n\)的所需的最小智力值. 题解:这题比赛为什么没想出来呢? ...

  6. - 迷宫问题 POJ - 3984 bfs记录路径并输出最短路径

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

  7. SpringBoot 启动慢的解决办法

    项目集成了很多内容,有 700 多个类,IDEA 中启动一次需要 70 秒,非常影响开发效率. 研究问题原因发现有以下几种情况会导致启动速度慢,优化后启动只需 26 秒左右了: 1. 和网卡有关,禁用 ...

  8. MySQL 启动流程及配置管理

    目录 MySQL 启动关闭流程 启动数据库 关闭数据库 MySQL 配置管理 预编译阶段 配置文件 命令行 MySQL 配置文件 配置文件的位置和优先级 配置文件的优先级测试 配置文件的生效顺序 配置 ...

  9. Linux 网络协议栈开发基础篇—— 网桥br0

    一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机 ...

  10. Loss_Function_of_Linear_Classifier_and_Optimization

    Loss_Function_of_Linear_Classifier_and_Optimization Multiclass SVM Loss:    Given an example(xi, yi& ...