一、描述

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

二、类与对象的关系

  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是对对象的抽象
  • 从代码运行角度考虑是先有类后有对象,类是对象的模板。
  • 例如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. Selenium爬虫实践(踩坑记录)之ajax请求抓包、浏览器退出

    上一篇: 使用Selenium截取网页上的图片 前言 最近在搞公司内部系统,累的一批,需要从另一个内部系统导出数据存到数据库做分析,有大量的数据采集工作,又没办法去直接拿到那个系统的接口,太难了,只能 ...

  2. Spring Security原理分析:系列集合

    Spring Security 工作原理概览:https://blog.csdn.net/u012702547/article/details/89629415 spring security执行原理 ...

  3. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  4. HDU 6852 Increasing and Decreasing 构造

    题意: 给你一个n,x,y.你需要找出来一个长度为n的序列,使得这个序列满足最长上升子序列长度为x,最长下降子序列长度为y.且这个序列中每个数字只能出现一次 且要保证最后输出的序列的字典序最小 题解: ...

  5. 2019牛客暑期多校训练营(第七场)B Irreducible Polynomial

    传送门 题意: 给你一个n次n+1项式(An*X^n+A(n-1)*X^(n-1)...A*X+A0),将系数An都给你,问你这个多项式是不是一个不可约多项式,可约多项式就是类型(x+1)*(x+2) ...

  6. fzu2218 Simple String Problem

    Accept: 2    Submit: 16 Time Limit: 2000 mSec    Memory Limit : 32768 KB  Problem Description Recent ...

  7. Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维,模拟栈)

    题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法. 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后 ...

  8. 加密算法——RSA算法(c++简单实现)

    RSA算法原理转自:https://www.cnblogs.com/idreamo/p/9411265.html C++代码实现部分为本文新加 RSA算法简介 RSA是最流行的非对称加密算法之一.也被 ...

  9. 牛客网多校第4场 D Another Distinct Values 【构造】

    题目:戳这里 题意,n*n的矩阵,只能填-1,0,1,问能不能使该矩阵的任意行和列的和都不想等. 解题思路:戳这里 可以说是一目了然了 附ac代码: 1 #include<iostream> ...

  10. HEXO添加置顶功能

    使用库:参考 http://wangwlj.com/2018/01/09/blog_pin_post/ 目前已经有修改后支持置顶的仓库,可以直接用以下命令安装.(cmd 到博客根目录,nmp运行) $ ...