首页 > 技术文章 > 初始Java——类与对象

Wu-blogs 2021-08-09 16:57 原文

类和对象

1认知

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

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

 

1.1面向过程&面向对象

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

现实世界的一个执行方式

 

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

 

是一类对象的统称

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

面向对象优势:个人认为,面向对象就是预先设定好一个解决一类问题的方法,并将之命名,然后每次遇到问题,直接用这个方法解决。一个方法通吃一类问题

面向对象设计

把我一个重要的经验:谁用有数据,谁对外提供操作这些数据(私有)的方法

(被动的一方是数据的拥有者,主动的一方是执行者)

开发时:找对象,建对象,用对象,并维护对象之间的关系

 

2类和类的实例化

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

类在Java中属于引用类型,Java使用关键字class来声明类

 

基本语法

// 创建类

class<class_name>{

field;//成员属性

method;//成员方法

}

 

class为定义类的关键字,ClassName为类的名字,{}中为类的主

类中的元素称为:成员属性

类中的函数成为:成员方法

class Person{

public int age;

public String name;

public String sex;

public void eat() {

System.out.println("吃饭!");

}

public void sleep(){

System.out.println("睡觉!");

}

}

 

类的实例化

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

1.类只是一个模型一样的东西,限定了类有哪些成员

2.一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

3.类实例化出对象就像现实中使用建筑设计图建筑造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

注意事项

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

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

同一个类可以创建多个实例

 

3类的成员

类的成员可以包含以下:字段、方法、代码块、内部类和接口等

 

3.1字段/属性/成员变量

在类中,但是方法外部定义的变量,这样的变量我们成为"字段"或"属性"或"成员变量"(三种称呼都可以,一般不会严格区分)

 

class person{

public String name;

public int age;

}

 

class Test{

public static void main(Steing[] args){

Person person = new Person();

System.out.println(person.name);

System.out.println(person.age);

}

}

 

//执行结果

null

0

 

使用.访问对象的字段

"访问"既包含读,也包含写

对于一个对象得分自动福安如果没有显示设置初始值,那么会被设置一个默认的初值

 

默认值规则

1.对于各种数字类型,默认值为0

2.对于boolean类型,默认值为false

3.对于引用类型(String,Array,以及自定制类),默认值为null

 

3.2认识null

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

class Person{

public String name;

public int age;

}

 

class Test{

public static void main(String[] args){

Persong person = new Person();

System.out.println(person.name.length());

}

}

 

//执行结果

Exception in thread "main" java.lang.NullPointerException

at Test.main(Test.java:9)

 

字段就地初始化

很多时候我们不希望字段使用默认值,而是需要我们显示设定初值,可以这样写:

class Person{

public String name = "张三";

public int age = 18 ;

}

 

class Test{

public static void main(String[] args){

Person person = new Person();

System.out.println(person.name);

System.out.println(person.age);

}

}

 

//执行结果

张三

18

 

3.2方法(method)

用于描述一个对象的行为

 

3.3构造方法

在实例化对象的时候会被自动调用到的方法,方法名字和类名相同,用于对象的初始化

虽然我们前面已经能将就地初始化,但是有些时候可能需要进行一些更复杂的初始化逻辑,那么就可以使用构造方法

 

3.4static关键字

1.修饰属性

2.修饰方法

3.代码块

4.修饰类

 

1.修饰属性

Java静态属性和类相关,和具体的实例无关,换句话说,同一个类的不通事理共用同一个静态属性

2.修饰方法

如果在任何方法上应用static关键字,此方法成为静态方法

静态方法属于类,而不属于类的对象

可以直接调用静态方法,而无需创建类的实例

静态方法可以访问静态数据成隐患,并可以更改静态数据成员的值

 

注意:

静态方法和实例无关,而是和类相关,因此这导致了两个情况:

1.静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的)

2.this和super两个关键字不能再静态上下文中使用(this是当前实例的引用,super是当前实例父类实例的引用,也是和当前实例相关)

 

注意:

main方法为static方法

实际上一个方法是不是带static是要以具体情况而定的

 

 

在开发过程中,首先通过对具体问题的分析理解,

1.找到对象

2.创建对象

3.使用对象

 

实际上的使用类似方法的调用

具体落实下来的要求与规则增加的同时应用模式与对象面更加广阔

例如我调用一个Person类,注意类的命名使用大驼峰命名法(每个单词首字母大写)

class Person{

     public String name;
    public int age;
    public String eat;
    public void name(){

         System.out.println(name);
   }

    public void eat() {

       System.out.println(this.name+" eat()!");
    }

}

 

 

public static void main(String[] args) {

    Person per = new Person();//对于类的调用,类似一个变量per的定义过程,也就是说现在的类型是Person,我设定的类型,= new Person();是初始化变量的过程,也就是说现在我的per就是类Person的代表了,该类内部的方法我都可以调用(当然private另当别论)
   System.out.println(per.name = "JKL");//我sout了一个name方法,打印了他,我在调用时给他赋值叫JKL
   System.out.println(per.age);//因为我定义时并没有给他赋值,调用也没给赋值,所以打印出来就是一个初值0
   per.eat();//调用了eat方法,eat方法有sout语句,所以sout了eat!
}

//执行结果

JKL

0

JKL eat()!

 

在给予类中变量定义时,可以字段就地初始化,例如 public String name = "JKL";

也可以在调用时初始化,例如:public String name;System.out.println(per.name = "JKL")

注意:未初始化的变量,是不具备长度的,因此person.name.length();则会产生NullPointerException空指针异常

默认值规则

各种数字类型,默认值为0

boolean类型,默认值为false

引用类型,默认值为null

 

static变量定义

首先要理解静态static的意义

 

都知道main在栈中创建一个内存,然后每调用一次类就在堆上创建一个新的内存,然后通过地址调用其上边的变量

但是无论在哪,通过static修饰的变量,被存在方法区上,所以他是一个实时的数据

当然,并不是说加了static他就无敌了

main方法还是yyds

所以在使用static定义变量时,注意顺序,语句顺序,运行顺序!!

 

static方法定义

这里就要涉及到一个问题,关于JVM 先挖个坑,等学完JVM在具体说

 

根据我目前的理解,static方法 就是开始运行就跑起来的方法,随调随用

非static方法,是需要this初始化一下,才能调用的,也就是说this给他一个信号告诉他,他该动起来了

 

涉及到一个内存的问题,如果当前的程序十分庞大,你的栈已经不能够支持你上来就把所有的方法跑起来,直接溢出了

 

坑挖好了,等埋!!!

 

 

小结

普通定义都是实例变量

static定义是静态变量(常量池)

final + 类型 定义的是常量

举例还是Person类

class Person{

     public String name;
    public int age;
    public String eat;//实例变量
    public static int count;//静态变量

public final int SIZE = 0;//常量

//实例成员函数

    public void name(){

         System.out.println(name);
       count = 0 ;
   }

//静态成员函数

    public static void age(){

         count = 0 ;
        age = 0 ;//报错,静态成员函数只能调用静态变量
   }

 

 

 

 

 

 

封装

 

OOD面向对象设计方法

OOA面向对象分析方法

OOP面向对象编程(特征:多态、继承、封装)

 

既然是理解贴

就不讲什么概念了,直接上具体用法

都他娘的是干货

 

private实现封装

private/public "访问权限控制"

说白了public公共的(公交车),private私有的(私家车)

 

把我类中的变量都用private修饰,然后呢也在类中定义一个方法,去使用这些变量实现功能

这样主函数调用时 直接调用这个方法,而不是调用具体某几个变量去做什么

 

封装的意义:

协同编程,不需要完全看懂别人的代码段,直接就按方法功能去调用,这样一方面防止某人离职,同时也防止某人出门出意外昂***

 

 

getter和setter方法

 

这个先看完this再回来写昂

alt+insert

 

 

构造方法

作用:实例化对象

this.代表当前对象的引用

语法规则:

方法名称必须与类名相同

构造方法没有返回值类型声明

每一个类中一定至少存在一个构造方法(我要是不主动定义,系统帮我自动生成一个)

 

系统默认的构造方法

实际上是一个空构造方法

public Person(){

}

诸如此类

去打印也是打印初值null 0 之类的

 

所以说在调用类时

Person per = new Person();

这个Person()实际上是我的构造方法,我不写 就是默认 我写了 就是我给的所谓的初值

所以写了构造方法

这样

public Person(){

this.name = "张辉";

this.age = 18;

this.sex = "男";

}

 

这是我给的构造方法

那么在调用时

Person per = new Person("张帅",81,"女");

我就可以直接覆盖我现在想要的东西

 

 

 

this

终于到了昂

表示当前对象引用(注意不是当前对象),可以借助this来访问对象的字段和方法

 

this的使用:

this.data;//访问成员变量

this.dut();//访问成员方法

this();//访问构造方法

 

首先阐述一下 静态方法不依赖对象所以不需要this帮助

 

推荐阅读