------- android培训、java培训、期待与您交流! ----------
面向对象的特点: 1.将复杂的事情简单化
2.面向对象将以前的过程中的执行者变成了指挥者
3.面向对象这种思想是符合现在人们思考习惯的一种思想
面向过程和面向对象的区别:过程其实就是函数,对象则是将函数及一些内容进行了封装
类的概念:
我走路,就是我自己作为一个人中间的一个对象!这个人就是一个Person类,而我是该类产生的一个实例
所以,类是抽象的一种概念,是描述的一类事物,汽车可以作为一个类,那么对象就是宝马,奔驰各种各样不同型号的车。
类可以有很多对象,在java中如何描述一个类呢?
class 关键字
类和编译器和主方法的关系
主方法是程序的入口,当一个类的修饰符是public时,则编译器会将此类作为主类去加载。所以编译器要生成的class类的名称必须和public修饰的类名称相同,否则报错
所以一般需要独立加载的类中会有主方法,也会有public
类的成员:
成员变量:对应的就是事物的属性
成员函数:对应的就是事物的行为
所以如果想要定义一个类,就是在定义成员变量和成员函数,但是在定义前,必须先要对事物进行属性和行为的分析,才可以用代码来体现
实例讲解类的定义:
//定义一个demo类
//类的书写:class 是区分大小写的,所以不能写错
类的名称的书写形式为所有首字母大写。便于增强代码的阅读性。
class Demo
{
//成员属性: age,name
//private : 修饰符,修饰成员。私有,当成员有此修饰符时,不能直接访问此成员
//既然不能直接访问此成员,那么要查询或者修改的时候,就一定会有访问此成员的内部方法。
//即去找内部比private权限要大的方法,这时发现了public修饰的set和get方法。
//public : 修饰符,表示最大的权限
//为什么要使用private这种麻烦形式呢? 为了增强代码的安全性,将属性封装起来,并且可以在获取或者修改函数内加入逻辑判断等操作。
private int age;
private String name;
//这个没有返回值的方法就是构造函数,构造函数的用处在于在类创建对象时,对其进行初始化值。
//构造函数的特点:
在创建对象时运行,用于初始化值。
没有返回值,名称一定和类名一致。
当没有手动定义Demo类的构造函数时,系统会默认生成一个Demo类的空参数构造函数Demo()
当手动定义了Demo类的构造时,默认创建的构造函数就不存在了。
构造函数可以重载,用于接收不同的初始化。
Demo(int age,String name)
{
this.age = age;
this.name = name;
}
//对外提供的设置和获取私有成员的方法
public void setAge(int age)
{
this.age = age;
}
public void setName(String name)
{
//this: 代表对象,就是所在函数所属对象的引用。
//什么时候使用this? 当定义功能时,如果该功能内部使用到了调用该功能的对象,就用this来表示
//构造函数的调用: this(实参)
//所以this后面如果跟的是括号,就是调用的该对象的构造,如果后面跟的是".",调用的就是该对象的成员
this.name = name;
}
public int getAge()
{
return this.age;
}
public String getName()
{
return this.name;
}
}
上述代码中我并没有定义主函数!
主函数的一个特点:独立运行。这个类是不需要独立运行的,所以可以不写主函数。
类中的成员的作用域:在整个类中。
成员变量和局部变量的区别:
成员变量定义在类中,作用域为整个类,存在于堆中
局部变量定义在方法,参数,语句上,作用域为大括号内,存在于栈中
构造函数和一般函数的区别?
构造函数,定义时不需要返回值,构造函数在创建对象时就被调用,用于初始化,而且只执行一次
一般函数,需要定义返回值,只有需要调用时执行,可以执行多次
说道构造函数就要提起构造代码块了;
构造代码块:同于构造函数,也是对对象进行初始化,不过,构造代码块是给所有的对象进行初始化,只要对象一建立,构造代码块优先于构造函数执行
浅显一点就是当构造函数有多个时,构造函数会根据参数类型不同去选择性初始化。而构造代码块不一样,不管使用什么样的构造函数,构造代码块都会先进行初始化。
堆和栈是java内存的两个区域
java内存有五个区域
寄存器 本地方法区 方法区 栈 堆
这时只讲解三个经常用到的:
方法区:所有的方法,和静态都存储在此,在类的加载时就存在。
栈: 存储的是局部变量。只要数据运算完成所在的区域结束,该数据就会被释放
堆:用于存放数组和对象,也就是实体。实体即用于封装多个数据的
堆会给每一个实体分配一个内存首地址值
堆内存中的变量都有默认初始化值,因为数据类型不同,值也不一样
垃圾回收机制。如果内部对象没有再被使用,过一段时间将会被垃圾回收机制判断为垃圾进行回收。
如何创建上述Demo类的实例对象呢?
Demo d = new Demo(10,"zhangyl");
new关键字用于创建对象使用。
那么创建这个对象在内存中做的事情有哪些?
1.首先从硬盘上指定位置找到Person.class文件加载进内存// javac java
2.执行main方法时,栈中开辟main方法的空间,在main中分配一个变量d // d
3.在堆内存中开辟一个实体空间,并且分配了一个地址值 // new 地址值-》 比如 0x0432
4.在该实体空间中进行默认初始化 // age = 0 ; name = null
5.空间属性进行显示初始化。即定义时是否有初始化值,因为在构造前定义的两个成员属性并没有赋值,所以没有显示初始化
6.进行构造代码块初始化 //没有
7.调用构造函数,进行初始化 // age = 10 name = "zhangyl"
8.将首地址值赋给p ,使p成为对象引用。 将0x0432赋给p
匿名对象: 如果一个对象只会进行一次调用时,就可以使用不建立引用的调用方式,即直接使用new而不在栈中建立引用
但是如果要多次调用某个对象中的成员,就需要给对象建立引用,方便调用。