IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java初识:类和对象 -> 正文阅读

[Java知识库]java初识:类和对象

java初识:类和对象

一、类和对象的初步认知

咱们先来说一说对象(此对象非彼对象)😉😉😉😉

在学习语言的时候常常听说面对过程,面对对象,什么是面对过程,什么是面对对象尼?

面向过程:

注重的是过程,在整个过程中所涉及的行为,就是功能 。

举个列子:

image-20210803175143713

(此图来源于漫画) 漫画链接: https://manga.bilibili.com/m/detail/mc27432?share_medium=android&share_source=qq&bbid=XY720097D8BB4A2452AEE37113A00C431542B&ts=1628157274441

配这张图更通俗易懂说明面对过程是注重过程的,一个步骤一个步骤解析,最后解决问题。

C语言就是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 。

面对对象:

注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来

来个例子看看:

image-20210805114003027

(此图来源于漫画) 漫画链接: https://manga.bilibili.com/m/detail/mc27432?share_medium=android&share_source=qq&bbid=XY720097D8BB4A2452AEE37113A00C431542B&ts=1628157274441

JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成

【面向对象设计】
面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法!(被动的一方是数据的拥有者,主动的一方是执行者 )

【开发时】

首先要思考:先找对象,创建对象,使用对象,并维护对象之间的关系

简而言之
面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为

下面进入正题:

二、类的成员和类的实例化

类就是一类对象的统称。对象就是这一类具体化的一个实例 。

总的来说:类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象

基本语法:

//创建类
class <class_name> {
    field;//成员属性
    method;//成员方法
}

class为定义类的关键字,Class_Name为类的名字,{}中为类的主体 。

类中的元素称为:成员属性,属性就是成员变量->定义在类中,方法外的变量。类中的函数称为:成员方法。

示例:

class Person {
   public int age;//成员属性 
   public String name;
   public String sex;
    
    public void eat() {
        //成员方法
      System.out.println("吃饭!");
 }
}

2.1 类的实例化

用类类型创建对象的过程,称为类的实例化

用法:

// 实例化对象
<class_name> <对象名> = new <class_name>()

实例:

class Person {
   public int age;//成员属性 
   public String name;
   public String sex;
    
    public void eat() {
        //成员方法
      System.out.println("吃饭!");
 }
}
public class main{
    public static void main(String[] args) {
        Person ps=new Person();//通过new实例化对象
        
        Person ps1=new Person();//可以有多个对象
        Person ps2=new Person();
        Person ps3=new Person();
        Person ps4=new Person();   
    }
}

image-20210805144646984

通过引用访问成员变量和成员方法:

class Person {
   public int age;//成员属性 
   public String name;
   public String sex;
    
    public void eat() {
        //成员方法
      System.out.println("吃饭!");
 }
public class main{
    public static void main(String[] args) {
        Person ps=new Person();//通过new实例化对象
        ps.eat();//成员方法调用需要通过对象引用调用
        
        ps.age="***";//通过对应的引用使用点号来访问,                        并初始化
        ps.name="***";
        ps.sex="**";

综上所述:

1.如何定义一个类

2.类当中需要要成员变量和成员方法

3.通过对象应用如何访问成员变量和成员方法

4.如何通过类实例化对象

5.实例化对象之后,对象在堆上

通过上面代码,这五个问题都可以迎刃而解。

注意事项:

1.new关键字用于创建一个对象的实例

2.使用 . 来访问对象中的属性和方法

3.同一个类可以创建多个对象

补充:

一、数据类型分为两部分:1.基本/内置类型/简单类型:整数,小数,字符

? 2.引用类型:字符串,数组,类,接口,枚举(引用类型都会有引用变量,引用变量存储的是地址)

二、属性也可称之为字段。

三、对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值

默认规则:

1.引用类型默认为null,

2.基本类型默认对应0值,

3.boolean默认false

4.char默认’\u0000’

认识null

null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常 。

class Person {
    public int age;//成员属性
    public String name;
    public String sex;

    public void eat() {
        //成员方法
        System.out.println("吃饭!");
    }
}
public class dome2 {
    public static void main(String[] args) {
        Person ps=null;
        System.out.println(ps.sex);//会发生空指针异常
        ps.eat();

    }
}

或者:

public class dome2 {
    public static void main(String[] args) {
        Person ps=null;
        System.out.println(ps.sex.length());
        //也是会发生控制住异常
    }
}

image-20210805153529427

2.2 static

之前讲到了成员变量,成员变量也分 普通成员变量静态成员变量,成员方法也是分 普通成员方法静态成员方法

1.修饰属性

2.修饰方法

3.代码块

1.修饰属性:Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性

image-20210805160335098

count被static所修饰,所有类共享。且不属于对象,访问方式为:类名 . 属性 。

2.修饰方法:

如果在任何方法上应用 static 关键字,此方法称为静态方法。
(1).静态方法属于类,而不属于类的对象。
(2).可以直接调用静态方法,而无需创建类的实例。
(3). 静态方法可以访问静态数据成员,并可以更改静态数据成员的值 .

class TestDemo {
    public int a;
    public static int count;
    public static void func() {
        count=100;
    }
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo.func();//无需创造实例对象就可以调用
        //相反若果是普通成员变量就要创造实例对象,再通过引用变量调用
        System.out.println(TestDemo.count);
    }
}

总结:普通方法的调用,需要依赖对象。静态方法不依赖对象

三、封装

3.1 private和getter和setter方法

private/ public 区别:

两个关键字都是这两个关键字表示 “访问权限控制”

1.被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
2.被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.

用法:

class TestDemo {
    private int age;//也被privat修饰,类的调用者(main方法中)不能直接使用,需要借助getter和setter方法无需在意类中内部情况,效率高
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;//this代表当前兑现的应用
        //name=name;不能这么用,这属于局部变量,出现的name都是这个方法的name
    }
    //为什么会使用getter和setter?如果用public类的调用者直接使用要跟进TestDemo类中内部的实现,效率不高。
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo td=new TestDemo();
       td.setName("123");
       String ret =td.getName();
        System.out.println(ret);
    }
}

四、构造方法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作

实例化对象分两步:

  1. 为对象分配内存
  2. 调用合适的构造方法(构造方法不止一个)

语法规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造

class TestDemo {//方法名称必须与类名称相同
    private int age;
    private String name;
    /*public TestDemo () {
        System.out.println("");
    }*/
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo td=new TestDemo();
    }
}

image-20210805170442646

编译器不会报错,当前类中没有提供任何构造方法的时候,编译器会默认提供一个不带参数的构造方法,一旦你提供了构造方法,编译器不在提供默认提供一个不带参数的构造方法。

class TestDemo {
    private int age;
    private String name;
    public TestDemo () {
        System.out.println("");//不带参数
    }
    public  TestDemo(String name) {
        this.name=name;//一个参数
    }
    public  TestDemo(String name,int age) {
        this.name=name;
        this.age=age;
       //两个参数
    }
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo td=new TestDemo();
       TestDemo td1=new TestDemo("某某");
       TestDemo td2=new TestDemo("某某“, 18);
    }
}

用到 了重载

注意事项
1.如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参

2.数的构造函数
3.若类中定义了构造方法,则默认的无参构造将不再生成.
4.构造方法支持重载. 规则和普通方法的重载一致

this关键字

this . :成员变量

this . :成员属性

this():调用其他的构造方法

补充:为什么this是代表当前对象的引用,而不是代表当前对象?

实例化对象需要分两步,1.为对象分配内存。 2.调用合适的构造方法(构造方法不止一个),两部完了才产生当前对象

 public  TestDemo(String name) {
        this.name=name;
    }//这里面this还在构造方法里面,还没有产生当前对象

在静态方法里面不能出现this,this与对象挂钩,静态跟对象没关系。

五、toString


class TestDemo {
    public int age;
    public String name;
    public void show() {//这个叫做show方法,表示这个对象的自我展示行为
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
} 

但是每次写show方法效率不高所以就有了toString。如果没申请toString就会打印一串地址。

class TestDemo {
    public int age;
    public String name;
    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo td=new TestDemo();
        System.out.println(td);
    }
}

image-20210805174906525

重写toString方法:

class TestDemo {
    public int age;
    public String name;
    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
    @Override//注释   重写的方法
    public String toString() {
        return "TestDemo{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
public class dome2 {
    public static void main(String[] args) {
       TestDemo td=new TestDemo();
        System.out.println(td);
    }
}

这样变量td就会重新调用toString方法,就可以打印值了

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:29:41  更:2021-08-06 09:29:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 9:59:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码