day 7:Java语言中的面向对象1

对象:一个对象由一组属性和操作(功能)组成;

换言之对象由两个部分组成,一个是属性,一个是方法;

int byte short char:数据类型:数据集以及定义在数据集上的一组操作;

类似的来说,类就是我们自己定义的数据类型;包含数据集(属性)和操作(方法);

使用类:通过定义具体的类的对应的实体--对象(类就是模板,对象那估计子似乎按照模板所创造出来的实体)

类时设计层面的东西,使用的时候我们都是使用具体的类;

同一类型的类只需要存在一个,但对象可以存在多个;

对于类的对象而言,类决定了对象中哪些数据以及这些数据分别所属的类型,但并没有确定其具体取值究竟是什么;

OO设计:

1、面向对象的分析(产品经理)

2、面向对象的设计(架构师)

3、面向对象的程序设计(java程序员)

4、代码复用(程序员)

设计模式可以阅读一些相关书籍;


面向对象的三大特性:封装、继承和多态;

面向对象的代码,其运行单位是对象,而类只是用来规定某一类对象的数据集和它拥有的行为;


封装:封装是一种信息隐藏技术

在实际开发中往往有这样一种场景,我们的代码别人要使用;

1、当我们的代码被别人使用之后,我们再来修改自己的代码时,我们就不太敢去去修改我们被别人使用的这段代买了。

2、因为我们不确定使用我们代码的应用场景,一旦只考虑自己需求去修改这部分代码,就可能给使用者造成不必要的麻烦

3、所以我们如果要修改代码,只能重写

4、我们必须隐藏一些我们自己类中的一些方法实现,这样一来我们很多代码,别人无法使用,这样我们就可以随便修改了

5、同时,有时候我们还需要开放出我们的一些代码(业务需求),别人只能通过我开房的方法来访问类;

6、封装完代码后,我们在提供相应的交互接口给外界,外界想要访问我对象中的属性时,就只能通过我开放出来的接口访问,这样一来我就可以对所有访问做一个条件控制;

将数据和基于数据的操作封装在一起,数据被保存在内部;目的就是想class creater和class user分开;

系统的其他部分只有通过在数据外面的被授权的操作才能进行交互,隐藏类的实现细节,实现了信息的隐藏及安全性;

提高了程序的安全性,且易于维护;

可以方便的加入控制逻辑,限制对属性的不合理操作;


继承;Class myclass extends fatherclass{};

继承是程序结构清晰,减少了编码的维护的工作量,子类可以使用父类所提供的方法,实现了代码复用;

实现代码复用还有 组合的形式;

泛型复用的是类型而不是代码;


多态:

1、重载(编译时多态)(overload):根据使用场景在编译器编译的时候就知道执行哪一段代码

add(x,y); add(x,y,z);

不是子类对弗雷同名方法的重新定义而是类对自身已有的同名方法的重新定义:重载方法的参数必须不同,或者是参数个数不同或者参数类型不同(方法的签名不同)

可以在任意类中发生;

2、覆盖(运行时多态)(override):编译器不清楚是父类中的还是子类中的方法;只有当代码真正在内存中运行的时候,虚拟机才会知道究竟是哪个同名方法;

父类和子类之间的同名方法;覆盖的发生范围只能在发生


类的使用:通过创建对象使用;(类无法直接使用,可以使用对象来间接使用类)

创建对象:

1、声明一个对象的引用变量;

类名Student:

Student st;(存在于栈空间)

2、初始化:

st=new Student;或者Student st=new Student;

3、赋初值:

String name; st.name="wyt";

int id; st.id=1234;

int age; st.age=18;


创建对象在内存中的过程:



构造方法:给对象的数据进行初始化(c++中的构造函数)

构造方法格式:

1、方法名与类名相同;

2、没有返回值类型,连void都没有

3、没有具体的返回值

构造方法注意事项;

1、如果你不提供构造方法,系统会给出默认构造方法;

2、如果你提供了构造方法,系统将不再提供

3、构造方法也是可以重载的

当一个实例对象被创建时,JVM会对其中各种类型的成员变量自动进行初始化赋值;


Student student=new Student();

Student wyt=new Student("wyt");

构造方法的重载:

我们可以通过定义不同的构造方法来更加灵活地给我们的成员变量赋初值;

public Student(int studentId){

Id=studentId;

}

public Student(String studentName){

Name=studentName;

}



在Windows系统中,正斜杠/表示除法,用来进行整除运算;反斜杠\用来表示目录。


局部变量:在方法中定义的变量;方法中的形式参数;

成员变量:(域;field):定义在类中、方法之外的变量;

局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁;其生命周期只在方法执行过程中;并且必须先赋值后使用,否则会出现编译错误;


成员变量的隐藏现象:

1、当成员变量的变量名和局部变量同名时,在局部变量的作用域内,我们还能访问到局部变量的值;

引入this关键字;

this关键字:表示当前对象的引用:通常我们在使用方法或者访问对象的成员变量的值时,通过对象名.xx;这里的对象名就是所指代的对象;

例如:

Student st1=new Student("abc");

st1.Student();

谁调用Student,this就代表谁;


类的初始化过程总结:

Student s=new Student ();

1、加载class字节码文件进内存;

2、在栈内存为s开辟空间;

3、在堆内存为学生对象开辟空间;

4、对学生对象的成员变量进行默认初始化

5、对学生对象的成员变量进行显式初始化(调用构造方法);

6、通过构造方法对学生对象的成员变量赋值;

7、学生对象初始化完毕,把对象地址赋值给s变量;


static关键字;是一个修饰符,被static修饰符修饰的成员变量,就是被该类的所有对象所共有的;

可以修饰成员变量和成员方法;

static关键字特点:(只依赖于类,不会随着对象的不同而不同,只要类存在static修饰的成员变量就可以被访问)

1、随着类的加载而加载;

2、优先于对象存在;

3、被类的所有对象共享;(这也是我们判断是否使用静态关键字的条件)

4、可以通过类名调用(建议只用类名调用)

static关键字的注意事项

1、在静态方法中是没有this关键字的

2、静态方法只能访问静态的成员变量和静态的成员方法;

静态变量和成员变量的区别:

1、所属不同:静态变量属于类,所以称为类变量;成员变量属于对象,所以也称为实例变量;

2、内存中位置不同:静态变量存储于方法区的静态区;成员变量存储于堆内存;

3、内存出现时间不同:静态变量随着类的加载而加载,随着类的消失而消失;成员变量对着对象的创建而存在,随着对象的消失而消失;

4、调用不同:静态变量可以通过类名调用,也可以通过对象调用;成员变量只能通过 对象名调用;









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值