【Java SE】(七) 类和对象(1)

目录

前言

一 类的定义和使用

1.1认识类

1.2类的定义

二 类的实例化

 2.1什么是类的实例化

 2.2 类和对象的说明

三 this的引用

3.1什么是this引用

3.2 this引用的特性

 四 对象的构造和初始化

 4.1 初始化对象

 4.2 构造方法

五 封装

5.1 封装的概念

5.2 访问限定符

5.3 包 

5.4 自定义包

5.5 包的访问权限控制举例


 

前言

我们都知道Java是一门面向对象的编程语言,即在Java中一切皆对象,对象即指认、狗、马等,而所谓面向对象就是就是依靠对象之间的交互来完成事情,比如人吃饭,人玩手机,马吃草等,那么所谓的类又是什么呢?为什么要使用类呢?类和对象之间又有什么关系呢?

接下来我们就来深刻的认识类和对象!

一 类的定义和使用

1.1认识类

类是用来对一个对象来进行描述的,主要描述这个对象的属性(外观尺寸等)、功能,描述完成后计算机才可以识别。

1.2类的定义

Java中定义一个类需要用到关键字class

语法格式:

class 类名{
    field;   // 属性、成员变量
    methon   //行为、成员方法
}

说明 :类中包含的内容称为类的成员,属性主要用来描述类的,称为成员变量或者类的属性。方法主要描述类的哪些功能,称为类的成员方法

举例

class Student{
        String name;
        int age;
        double lenght;
        public void eat(){
            System.out.println("正在吃饭!");
        }
        public void run(){
            System.out.println("正在跑步!");
        }
    }

【注意事项】

类名注意采用大驼峰定义,此处写的方法不带static关键字

二 类的实例化

2.1什么是类的实例化

类的实例化:用类类型创建对象的过程就叫类的实例化.Java中采用new关键字配合类名来示例化对象,同一个类可以创建多个示例。

举例说明

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

 2.2 类和对象的说明

1.类只是一个模型,用来描述一个实体的,限定了类有哪些成员

2.类是一种自定义类型,类定义出来的变量我们称为对象

3.类实例化出来的对象就像我们给出一个模板,按照模板做出一个东西,类似于设计图。

三 this的引用

3.1什么是this引用

1.首先提出一个问题,为什么要引用this?

我们来先来看一个例子:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

这个时候函数体中分不清是谁赋值给谁,我们就要引用this。

而this引用又是什么呢? 

this是Java编译器给每一个“成员方法”隐藏一个引用型参数,该引用参数指向当前的对象或者成员方法运行时调用该成员方法中的方法对象

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

3.2 this引用的特性

1.this的类型:对应类类型引用,哪个对象调用就是引用哪个对象的引用类型

2.this具有final属性,只能引用当前对象

3.this是成员方法中的一个隐藏的引用参数,编译器自动传递,成员方法执行时,编译器会自动负责将调用成员方法的对象传递给该成员方法,this来负责接收。

this用法:

this.data // 访问成员变量

this.methon() //访问成员方法

 四 对象的构造和初始化

4.1 初始化对象

1.就地初始化watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

通过调用Today方法设置具体日期 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

通过调用Today方法设置具体日期,会比较麻烦,所以需要调用合适的构造方法。

 

2.默认初始化

提出一个问题:局部变量在使用的时候必须初始化,而成员变量则可以不用呢?

Day day = new Day(); //虽然只是一个简单的语句,但是在JVM中需要处理很多事

1.检测对象对应的类是否加载了,若没有则加载

2.为对象分配内容空间

3.处理并发的安全问题,如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

4.初始化所分配的空间,即对象空间申请好了之后,对象中包含的成员已经设置好初始值

如:byte —— 0,char —— '\u0000’等

5.设置对象信息

6.调用构造方法<>,给对象中各个成员赋值

 4.2 构造方法

概念:构造方法是一个特殊的成员方法,用来实例化对象时调用

(1.分配内存 2.调用合适的构造方法)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

语法格式:名字一定要与类名相同,创建时,编译器会自动调用,在整个对象的生命周期内只调用一次。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

当程序中没有写构造方法时,编译器会默认帮我们提供一个不带参数的构造方法 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_17,color_FFFFFF,t_70,g_se,x_16

 当你写了构造方法后,编译器便不会在默认帮你生成

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

一个类中可以有多个构造方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

 【注意】

1.构造方法没有返回值,方法名必须与类名一致;

2.一个类中至少有一个构造方法(即使你没有写);

3.构造方法本质是用来实例化对象时调用,分配内存,调用合适的构造方法;

4.this可以调用本类中的构造方法【构造方法中使用时必须放在第一行)

this.() 调用构造方法

五 封装

5.1 封装的概念

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开口接口来和对象进行交互

5.2 访问限定符

类可以将数据以及封装数据的方法结合在一起,访问权限是用来控制方法或者字段能够直接在类外使用,既可以限定类中成员的可见性,也可以控制类的可见性

四种访问限定符

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

5.3 包 

:把多个类放在一起称为一组,称为软件包,那个都更好的管理类。

导入包中的类

Java中已经提供了很多类供我们使用,例如 Data类,可以使用 java.utill.Date 导入java.util这个包中的Data类,

public class TestDemo1 {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date(); //得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

也可以使用 import java.util.Date 

import java.util.Date;

public class TestDemo1 {
    public static void main(String[] args) {
        Date date = new Date(); //得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

若想使用Java中的其它类,可以使用 import java.util.*

import java.util.*;


public class TestDemo1 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.getTime());
    }
}

避免出现冲突,更建议显式的指定要导入的类名

import java.util.*;
import java.sql.*;

public class TestDemo1 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.getTime()); //编译错误,utill和sql中都存在Date这样一个类
        这种情况下需要使用完整的类名
        java.util.Date date = new java.util.Date();
        java.sql.Date date1 = new java.sql.Date(3);
    }
}

【注意】import只是为了写代码时更方便,与C++的#include差别很大.

5.4 自定义包

操作步骤:

1.在IDEA中先新建一个包:右键 str -> 新建 -> 包watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

2.在弹出的窗口输入包名,如com.demo1,然后回车

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16 

 3.在包中创建类名,右键包名 -> 新建 -> 类,输入类名回车即可

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOa-hOWkjw==,size_20,color_FFFFFF,t_70,g_se,x_16

5.5 包的访问权限控制举例

package com.demo1;

class Student{
    private String name;
    private int age;
    public double lenght;
    public Student(String name,int age,double lenght){
        this.name = name;
        this.age = age;
        this.lenght = lenght;
    }
    public void working(){
        System.out.println("正在上课!");
    }
    public void runing(){
        System.out.println("正在跑步!");
    }
}

===================================================
package com.deme2;
import com.demo1.Student;

public class First1 {
    public static void main(String[] args) {
        Student student = new Student("lucke",17,167);
        System.out.println(student.name);  //编译错误 name时私有的,不允许被其他类访问
        System.out.println(student.age);  // 编译错误 age 是default,不允许其他包中的类访问
        System.out.println(student.lenght);
        student.runing();
        student.working();
    }
}

【常见的包】

1.java.lang系统常用基础类(String、Object),此包从JDK后自动导入

2.java.lang.reflect:java反编程包

3.java.net进行网络编程包开发

4.java.sql:进行数据库开发的支持包

5.java.util:是java提供的工具程序包(重要)

6.java.io:l/O编程开发包

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@澄夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值