一.面向对象:
面向对象:面向对象不是一种技术,而是一种思想。以什么样的形式,组织代码,以什么样的思路去解决问题。
二.类和对象:
类和对象:java中想要创建对象,就必须用类的存在。
类是指一组相关属性和行为的结合,我们将其理解为是一张对象的设计图。(通常在编写代码时,public class 类名{},这样就定义了一个类)。生活中各个事务都可以称为对象。
java语言中需要根据类来进行创建对象。一个类由两部分组成,一个叫做属性,另一个叫做行为。
属性,主要包括成员变量:跟之前定义变量的格式一样,只不过要放在方法的外面。
行为:成员方法:跟之前一样,只不过定义方法前需要将static关键字去掉。
类:一组相关属性和行为的集合,可以将其看作是对象的设计图。
对象:是根据类,创建出来的实体,该实体可以利用类中的属性和行为。
类和对象的关系:
1)依赖关系:需要根据类,创造对象。
2)数量关系:根据一个类,可以创造出多个对象。
类的组成:类的本质就是对事物的描述。
属性(名字的描述):在代码中使用成员变量表示。和之前一样,只不过位置发生了变化,定义在了方法的外面。
行为(动作的描述):在代码中使用成员方法表示。成员方法和之前的定义方法一样,只是将static关键字给去掉了。
创建对象的格式:类名 对象名 = new 类名();
使用对象成员变量的方法。:对象名.成员变量;
使用对象成员方法的格式。
对象名.成员方法();
三.对象和类的使用细节
如果打印对象名,会得到的是地址值。例如
public class test{
class zoo{
String name = "kaixin";
}
public static void main(String [] args){
zoo twa = new zoo();
System.out.println(zoo);
}
}
}
这样打印的结果并不是twa这个对象中的变量,而是一份地址。例如下图所示:这份地址采用的是全类名的形式:报名 + 类名(下图中所示的打印结果并非是上图代码的结果。)
成员变量,没有赋值也可以使用,只不过打印显示的是默认值。
变量的默认值:
byte类型的默认值:0
short类型的默认值:0
int类型的默认值:0
long类型的默认值:0
float类型的默认值:0.0
double类型的默认值:0.0
char类型的默认值:
boolean类型的默认值:false
四.对象和类的内存图。
类属于引用数据类型,首先当源文件加载成字节码文件进入方法区,主方法直接进入栈内存,随后然后按照顺序结构执行流程,执行第一个程序Student stu = new Student();该程序中含由new,系统会在堆内存中开辟空间,产生一份地址,这份空间中含有Student中的成员变量和成员方法,由于这些数据存在在堆内存中,如果没有赋值,系统则会付给它默认值,同时在这份空间中也产生了成员方法和成员变量的引用地址。完成了上述操作之后,会将刚开始这个空间的地址,返回给堆内存中的stu中,然后按照顺序结构进行运行,遇到类中的调用的方法时,系统会根据stu中的地址,找到堆内存中的空间,这个空间中存在着成员方法的引用地址,系统找到这个引用地址之后会根据这个地址在字节码文件中的位置,将该成员方法进行调运,随后该方法进入了栈内存中,进行运行,运行后弹栈消失。
两个对象的引用图,分析与一个对象分析较为类似。主要原因是因为,在创立对象时,系统在堆内存中创立了两个互不干扰的空间。
两个引用指向相同内存,可以利用数组内存图的思想分析,因为他们的本质都是地址值的交换。
三,成员变量和局部变量的区别
成员变量:
类中的位置:成员变量在方法的外面。
初始化不同:成员变量由默认初始化值。
内存中的位置不同:成员变量是在堆内存中。
生命周期不同:随着对象的创建而存在的,随着对象的消失而消失的。//当一个对象没有任何引用记录时,这个对象会被判定为java内存中的不定时垃圾,会被java程序中的垃圾回收器,给回收。、
作用域:在自己所属的打括号内
局部变量:
类中的位置:局部变量存在在方法内。
初始化不同:没有初始值,使用之前需要提前赋值
内存位置不同:局部变量存在在堆内存中。
生命周期不同:随着方法的调运而存在,随着方法的运行结束而消失。
作用域:在自己所属的大括号内
变量的作用域:就是变量的使用范围。
成员变量之所以在整个程序中都能用,是因为它所属的大括号就是这个类的大括号。
无论时成员变量还是局部变量都有着自己的作用域,即在自己的大括号里面可以起作用
四,this的作用
成员变量与局部变量重名的时候,java语言采用就近原则
该程序使用this关键字解决了成员变量和局部变量重名的问题。This可以调用本类的对象,this调用本类的方法。
因此this的作用就是调用本类的成员(成员包括成员方法和成员变量)
This.的使用规则:
当用this.去调用本类成员的方法时,this.可以直接省略。
当用this.去调用本类成员变量时,只有本类中无重名变量时,this.才能省略。
This表示的是当前类对象的引用。
打印this关键字,会得到一份地址,这份地址就是当前对象的地址。//谁来调用我,我就代表谁!
哪一个对象调用的方法,this关键字就代表谁。
该流程的内存图解:首先源码文件加载成字节码文件,停留在方法区中,主方法是程序的入口,会直接从方法区进入栈内存中,然后按照顺序结构进行执行。首先进行执行一语句,创立了一个对象stu,接着系统会在堆内存中,开辟出一个新的空间用来存放stu中的数据,同时产生一份地址,并将这份地址返回给stu,此时stu就记录着这个地址,此时打印stu就会打印出这份地址,接着运行程序,在推内存中使变量age赋值23,然后继续运行,调用方法sayhello,此时的调用者式对象stu,由于调用的方法中含有形参:String name ,并且赋值为“西域狂鸭”,由于此时,sayhello中并没有先前堆内存那个空间的地址,因此系统会直接赋值给sayhello方法中name,此时打印的是西域狂鸭,之后运用this引用名字,由于this关键字的作用,this关键字引用那个对象就会代表那个对象的地址,当this引用name之后,就会将之前产生的地址值交给系统,系统会根据这份地址,找到先前创建对象时所开辟的空间中,并找到name这一变量中的数据,钢门吹雪,并在控制台中打印出钢门吹雪。//这个过程我们可以看出当类文件有重名的变量时,系统会采取就近原则,打印最近的变量,遇到这个问题我可以利用this关键字,this关键字的作用就是引用谁代表谁。
This关键字的作用就是调用本类中的对象,调用这后会将该类的地址交给系统,这样系统就能找到该类的数据。简单称为,调用谁,就代表谁。
This关键字代表当前对象的引用(地址)
五.构造方法的概述:
构造器:
public 类名(){}//空参构造方法
public 类名(参数){}//代参构造方法
初始化一个新建的对象
构建,创建对象的时候,所调用的方法。//这两句话传达的时一个意思.//创建对象时所使用那个方法就叫做构造器。
格式:1.方法名字与类名相同,大小写也需要一致。
2.没有返回值类型,连void都没有
3.没有确定的返回值(不能由return语句带回结果数据)
构造方法的执行时机:
在创建对象的时候,被调用执行。没创建一次对象。就会执行一次构造方法。
构造方法的作用:
1.本质作用:创建对象
2.结合执行时机:可以在创建对象的时候,给对象中的数据做初始化操作。
面向对象初级的东西就到这里,下一篇介绍面向对象高级。