一、描述

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

二、类与对象的关系

  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是对对象的抽象
  • 从代码运行角度考虑是先有类后有对象,类是对象的模板。
  • 例如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. 如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端

    通过之前的文章<Kafka分区分配策略>和<Kafka高性能揭秘>,我们了解到:Kafka高吞吐量的原因之一就是通过partition将topic中的消息保存到Kafka集群中 ...

  2. mac外接键盘HOME,END键问题

    参考: How to Fix the Home and End Buttons for an External Keyboard in Mac mac老用户应该都知道, MAC自带的键盘的 cmd+左 ...

  3. C++的匿名函数(lambda表达式)

    总述  C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...

  4. JVM系列(一):jvm启动过程速览

    jvm是java的核心运行平台,自然是个非常复杂的系统.当然了,说jvm是个平台,实际上也是个泛称.准确的说,它是一个java虚拟机的统称,它并不指具体的某个虚拟机.所以,谈到java虚拟机时,往往我 ...

  5. Codeforces Round #635 (Div. 2)

    Contest Info Practice Link Solved A B C D E F 4/6 O O Ø  Ø     O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Sol ...

  6. AtCoder Beginner Contest 176

    比赛链接:https://atcoder.jp/contests/abc176 A - Takoyaki #include <bits/stdc++.h> using namespace ...

  7. 2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage(11/12)

    2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage A. Coffee Break 排序之后优先队 ...

  8. python爬虫模板 - 最好大学网

    import requests from bs4 import BeautifulSoup import bs4 def get_html_text(url): try: #kv = {'user-a ...

  9. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest PART(10/12)

    $$2017-2018\ ACM-ICPC,\ Asia\ Daejeon\ Regional\ Contest$$ \(A.Broadcast\ Stations\) \(B.Connect3\) ...

  10. Trap HDU - 6569 二分

    题意: 给你n个边长ai,你需要挑出来4个边使得它们可以构成等腰梯形.问你能构成多少种不同的等腰梯形 题解: 我们首先处理一下边长为x的且这个边长出现大于等于2次的边,因为等腰梯形需要两条相等的边 然 ...