-------android培训、java培训、期待与您交流! ----------
1 面向对象概念
面向对象是相对面向过程而言的,和面向过程一样都是一种思想。将复杂问题变简单了。
面向过程强调功能行为,面向对象将功能封装进对象强调具备了功能的对象,它是基于面向过程的。
Java开发中先找是否已有对应功能的类、API,来完成我们的设计。有对象拿来用,没对象自己造!
2 类与对象的关系
面向对象三个特征:封装,继承,多态
找对象,建立对象,使用对象,维护对象的关系。
类:对现实生活中事物的描述。描述时提取对象中共性的内容,对具体抽象。描述事物就是在描述事物的属性和行为。
对象:这类事物,实实在在存在的个体。
映射到java中,描述就是class定义的类
具体对象就是对应java在堆内存中用new建立实体。该实体的引用(句柄)存放在栈内存中,该引用也叫对象地址(指针)指向该实体。
属性对应类中的变量,行为对应类中的函数(方法)。属性和行为共同成为类中的成员。
成员变量和局部变量:
成员变量作用于整个类中。
局部变量作用域函数中或者语句中。
在内存中的位置:成员变量在堆内存中,因为对象的存在才在内存中存在
局部变量存在于栈内存中。
匿名对象:new Car();
使用方式1:当对对象的方法只调用一次时可以使用匿名对象来完成,这样简化!
如果对一个对象进行多个成员调用,必须给这个对象七个名字。
使用方式2:可以将匿名对象作为实际参数进行传递。
3 封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离,便于使用,提供重用性,提供安全性。
封装原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对齐访问。
private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)只在本类中有效。
私有仅仅是封装的一种表现形式。之所对外提供访问方式,就是以为内可以再访问方式中加入逻辑判断语句。对方问导数据进行操作,提供代码健壮性。
4 构造函数
特点:函数名与类名相同,不用定义返回值类型,不可以写return语句。
作用:给对象进行初始化
注意:默认构造函数的特点
多个构造函数是以重载的形式存在的
对象一旦建立就会调用与之对应的构造函数。
小细节:当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
当在类中自定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数在写法上有不同。在运行上也有不同。狗仔函数实在对象一旦建立就运行。给对象初始化,而一般方法是对象调用才执行,给对象添加对象具备的功能。
一个对象建立构造函数只运行一次,而一般方法可以被该对象调用多次。
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
构造代码块:给对象进行初始化
对象一旦建立就运行,而且优先于构造函数执行
和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
【代码】:{
System.out.pringln(“init….”);
}
一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和类一致。如果类被public修饰那么默认的构造函数也带public修饰符。如果类没有被public修饰那么默认的构造函数也没有public修饰。默认的构造函数的权限是随着类的变化而变化的。
5 this关键字
this: 看上去是用于区分局部变量和成员变量重名的情况。
特点:就代表本类的对象。简单说哪个对象在调用this所在的函数,this就代表哪个对象。
应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用到了本类对象,都用this表示。
构造函数间调用只能用this()的方式。且放在第一个语句(初始化的动作先执行,动作里面还有初始化动作a,则先执行a动作)。
6 static关键字
静态:是一个修饰符,用于修饰成员,包括成员变量和成员方法。
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被【类 名.静态成员】调用。(学员,电脑,饮水机的例子:学员使用电脑是特有的对象,饮水机可以被共享。所有学员调用同一个饮水机。)
方法区(共享区,数据区):静态数据,方法等存放的地方。
静态的特点:
1 随着类的加载而加载。随着类的消失而消失。说明他的生命周期最长。
2 优先于对象存在。
3 被所有对象所共享。
4 可以直接被类名调用。
实例变量和类变量的区别
1存放位置:类变量随着累的加载而存在汉语方法区中。
实例变量随着对象的建立而存在于堆内存中。
2生命周期:类变量生命周期最长。随着类的消失而消失
实例变量生命周期随着对象的消失而消失。
静态使用注意事项:
1静态方法只能访问静态成员。非静态方法既可以访问静态也可以访问非静态。
2 静态方法中不可以定义this,super关键字。因为静态优先于对象存在。所以静态方法中不可以出现this,super关键字。
3 主函数是静态的。
主函数是一个特殊的函数,作为程序的入口可以被jvm调用,
Jvm调用主函数时,传入的是newString[0];
静态有利有弊:
利:对对象的共享数据进行单独空间的存储。节省空间。没有必要每个对象中都存储一份。可以直接被类名调用。
弊:生命周期过长。访问出现局限性。静态虽好,但只能访问静态。
什么时候用静态?
因为静态修饰的内容有成员变量和函数。
当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
当方法的功能内部没有访问到非静态数据(对象的特有数据),那么该方法可以定义成静态的。
静态代码块:随着类的加载而执行,只执行一次。用于给类初始化。
static {
静态代码块中的执行语句
}
静态代码块中不能访问非静态成员。
对象初始化过程:Personperson = new Person();
这句话都做了什么事情?
1. 因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
2. 执行该类中的static代码块,如果有的话给Person.class类进行初始化。
3. 在堆内存中开辟空间,分配内存地址。
4. 在堆内存中建立对象的特有属性。并进行默认初始化。
5. 对属性进行显示初始化。
6. 对对象进行构造代码块初始化。
7. 对对象进行对应的构造函数初始化
8. 将内存地址赋给栈内存中的p变量。
同级别的语句,比如静态代码块和静态变量声明或非静态代码块和非静态成员声明同时出现的时候,必须将成员的声明写到引用它的代码块前面。否则会报“非法向前引用”错误。如下代码:
public classTest{
static{
b = 9;//没有错误
System.out.println(b);//非法向前引用错误。
}
public static int b = 0;//静态成员声明。
{
a = 9;//没有错误
//System.out.println(a);//非法向前引用错误。
print();//正常编译
}
void print(){
System.out.println(a);//正常访问
}
public int a = 0;//静态成员声明。
}
7 单例设计模式
设计模式:解决一类问题最行之有效的方法。
单例模式:解决一个类在内存中只存在一个对象。
1. 为了避免其他程序过多建立该类对象。先禁止其他程序建立该对象。
2. 还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3. 为了方便其他程序对自定义对象的访问可以对外提供一些访问方式。
//饿汉式。开发建议使用方式。
public classSingle{
//构造函数私有化
private Single(){【1】
}
private static Single s = new Single();//静态私有对象。【2】
public static Single getInstance(){【3】
return s;
}
}
//懒汉式,处理同步问题。
public classSingle{
//构造函数私有化
private Single(){【1】
}
private static Single s = null;//静态私有对象的引用。【2】
public static Single getInstance(){【3】
if(s == null){
synchronized(Single.class){
if(s== null){
s= new Single();
}
}
}
return s;
}
}
对于事物该怎么描述还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
8 帮助文档生成工具
要使用javadoc.exe生成帮助文档,则类必须是public的。
使用语法:javadoc –dmyhelp –author –version classname.java
解释myhelp:文档存放路径
-author:文档作者,或者类的开发者
-version:版本
Classname.java:要生成文档的类。