day06 面向对象思想

面向对象思想

讲面向对象之前不得不提面向过程.

面向过程:是单一的操作,比如说买东西,洗澡,刷牙就是.

面向对象:我可以请个菲佣,帮我买东西,帮我洗澡,帮我刷牙,这就是面向对象

面向对象的特点:

可重用性强

三大特征:继承\封装\多态

注意:面向对象不可能取代面向过程的.面向对象是基于面向过程的.

对象和类的关系

状态和行为

状态指的是人的肤色\头发\什么人行为指的是走路\跑\喝茶

对象(object)可以定义成包含数据(状态)和行为的一个实体,对象也称为实例(instance)

对象具有状态和行为

-------------------------------------------------------------------------------------------------------------------

类是对象的模板.

在编程世界里,是先有类,再有对象的.

类的定义

public class Person{
	String name;
	int age;
	void run(){
		System.out.println("人在奔跑着");
	}
	void eat(){
		System.out.println("人在吃饭");
	}
}
这里的nae和age是成员变量,又叫做字段(Field)

对象的基本操作

我想拿到上面代码的对象

Person p1 = new Person();
赋值

p1.name = "张三";
p1.age = 16;

调用方法

p1.run();
p1.eat();

上面的代码已经有 

1创建对象

2赋值

3使用方法

还有些操作

4打印对象  是一串数字

5对象的比较  == 比较的是引用的内存地址值

6对象的生命周期 new到垃圾回收器回收之间

7匿名对象

对象的实例化过程

学生缴费案例

class Student{
	String name;
	int age;
	boolean isFee = false;
	void jiaofei(){
		isFee=true;
	}
}
public class StudentDemo{
	public static void main(String[] args){
		Student s1 = new Student();
		Student s2 = new Student();
		Student s3 = new Student();
		s1.name = "王";
		s1.isFee = true;
		s2.name = "张";
		s3.name = "徐";

		Student[] sarr = {s1,s2,s3};
		for(Student s:sarr){
			if(s.isFee==false){
				s.isFee = true;
			}
		}
		System.out.println(s1.isFee);
		System.out.println(s2.isFee);
		System.out.println(s3.isFee);

	}
}
构造器

我们在创建Student对象,代码如下:

Student s1 = new Student();

其实我们在创建对象的时候,都是调用构造方法,构造函数/构造器/构造子.

--------------------------------------------------------

构造器:主要用于创建对象并返回对象和初始化对象数据.

--------------------------------------------------------

构造器的特点:

    类都有一个默认构造器,当不显示的定义构造器的时候,编译器会在编译的时候,提供一个默认构造器.

    1):构造器的名字必须和当前所在类的类名相同.

    2):不需要定义返回值类型,更加不能使用void作为返回.构造器的目的在于创建和返回当前类的对象,即使要编写返回类型,也应该是当前类名,如:StudentStudent(){},既然和当前类名相同,就规定统统省略.

    3):构造器中不需要使用return来返回当前构造的对象.

-------------------------------------------------------

默认构造器:

     1):无参数,无方法体.

     2):构造器的访问修饰符和当前类的修饰符相同(是否有public).

     3):一旦在类中显示地提供了构造器,则默认的构造器就不再提供了.

     推论:一个类至少有一个构造器(即使没有自定义,编译器也会创建一个默认的).

-----------------------------------------

public class Student{

     默认的构造器

     public Student(){}

}

---------------

class Student{

     默认的构造器

     Student(){}

}

-------------------------------------------------------

方法的重载:在同一个类中,方法同名,但是参数列表不同.

            解决了相同的功能方法,因为参数列表不同,而带来参数名不同的问题.

构造器重载:

          不同类的构造器是不相同的.对于构造器重载来说,肯定是在同一个类中,并且构造器都是和类名相同.

          所以在同一个类中的多个构造器就必须参数列表不同(参数类型,参数个数,参数顺序).

static修饰符

类是用来描述多个对象共同的状态和行为的,就拿人的姓名.

看右图,春哥和凤姐这个两个对象,都有拥有姓名,年龄身高和体重等状态,但是不同对象的状态值却不一样.此时发现,我们所描述的信息是针对于某一个具体对象的,对象不同,那么名字是可能不一样的.

---------------------------------------------------------------

现在,我想描述一类事物的状态和行为,比如:人类,有总人数的状态,有毁灭的行为.

可能有人认为,毁灭是一个行为,那么可以在Person类中,定义一个方法(destory),若想毁灭人类,则调用该方法即可.但是新的问题又来了?到底谁来调用destory方法?

   春哥.destory();

   凤姐.destory();

都不对的,因为他们只能表示自己,不能表示人类.

----------------------------------------------------------------

我们平时在类中定义的成员变量和方法,都是对象的状态和行为.

那如何表示,一类事物的状态和行为呢?不是某一个个体(对象)的.

 此时,为了解决该问题,咱们得学习一个修饰符:static.

-----------------------------------------------------------------

static可以修饰成员变量(字段),可以修饰方法等,就表明该字段或该方法属于类,而不属于某一个对象.

-----------------------------------------------------------------

类成员(static修饰成员)的特点:

   1):随着类被加载进JVM而同时也最初始化和在内存中分配空间.

   2):优先于对象存在.(对象是通过new出来的.)

   3):被该类的所有对象所共享.

        该状态/行为是整个人类的,那么每一个人都是拥有该状态/行为的.

   4):直接使用类名调用即可.

      人类毁灭: Person.destory();

类成员和实例成员的访问:

------------------------------------------------

类  成员:使用static修饰的成员变量/方法,属于类,所以可以直接使用类名访问.

实例成员:没有使用static修饰的成员变量/方法,属于对象.必须使用对象来访问.

----------------------------------------------------------------------------------

访问规则:

    1):静态方法只能访问静态的成员变量/方法,不能访问非静态的成员变量/方法(属于对象).

               静态成员优先于对象存在.

    2):非静态方法可以访问非静态成员变量/方法,也可以访问静态的成员变量/方法.

               因为底层使用对象访问的.

    3):对象可以访问静态成员,但是不推荐,因为底层依然使用类名在调用.

    4):类可以访问静态成员,类不能访问非静态成员(成员变量/方法).

-----------------------------------------------------------------------------------

一般的,在开发中类成员如何使用:

    一般的,在开发中工具类的工具方法都使用static修饰,如此的好处,直接使用工具类名.方法就可以调用,使用更加简单.

   数组的工具类:java.util.Arrays中的工具方法.

   一般的,若静态方法需要访问一个成员变量,此时才把成员变量使用static修饰.

深入变量

变量的分类和初始值:

变量因定义的位置不同,分为成员变量和局部变量.

成员变量: 直接定义在类的花括号中的变量.又称之为,字段(Field),有人把成员变量称之为属性,这是错的.

           使用static修饰:     类成员变量.

           没有使用static修饰: 实例成员变量.

局部变量: 变量除了成员变量,其他就是局部变量.

           1):直接定义在方法中的变量.

           2):方法的形式参数.

           3):代码块({})中的变量.

成员变量都有初始化值,局部变量没有初始化值.

使用局部变量,必须先赋值.成员变量的默认初始值如右图.

在Java中,只有final修饰符,可以修饰局部变量,其他的都不能修饰局部变量.

-----------------------------------------------------------------------------

变量的作用域和生命周期:

   当一个变量被定义的时候,它作用域就已经确定了.

   成员变量:在整个类中有效.

局部变量的初始化和在JVM中的运行机制:

局部变量定义后,必须显示初始化后才能使用,因为系统不会为局部变量执行初始化操作。

这就意味着,定义局部变量后,系统并未为这个变量分配内存空间。

直到程序为这个变量赋值时,系统才会为局部变量分配内存,并将初始值保存到该内存中。

局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。

   基本数据局部变量:直接把这个变量的值保存到该变量所对应的内存中。

   引用数据局部变量:这个变量内存中存的是堆中的一块内存空间的地址值,通过该地址引用到该变量实际引用堆里的的对象。

栈内存中的变量无需系统垃圾回收,其往往随方法或代码块的运行结束而结束。

栈中的运算速度远远快于堆内存.





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值