一 Java面向对象
1. 面向对象和面向过程
C和c++都是一种面向过程的语言,面向过程的核心是算法+数据结构,即用数据结构把数据存储起来,用算法来实现操作数据的具体过程。数据和处理人为的分开,使得数据游离在对象之外,加大了开发难度。因此,面向过程的本质是面向机器,而不是面向问题。
面向对象程序设计是一种思想,它体现了人们思考问题和解决问题的自然思路。他把数据放在第一位,然后再考虑如何操作数据的算法。面向过程强调的是功能行为即操作数据的过程,比如我们往冰箱里存储东西,面向过程是这样想的,打开冰箱了,然后把东西放进去,再关上冰箱,我们就好似是一个执行者。二面向对象则是把冰箱看成一个对象,他具有打开、关闭、存储功能,我们就操作冰箱这些功能,使得我们变成一个指挥冰箱这个对象来做事的指挥者。
面向对象的特点?
A:面向对象:将功能封装进对象,强调了具备了功能的对象。
b:面向对象让问题复杂简单化,从执行者变成指挥者。
c:面向对象更符合人们的思考方式。
D: 面向对象三个特性:封装、继承、多态。
二 类与对象
对象:现实生活中的任何事物都可以看作是一个对象,每一个对象都使用自己属性来描述自己的特征,使用方法来描述自己的行为。
类:是一类事物的统称,如人类、鸟类。类是对现实生活中同一事物的特征和功能进行抽象后形成的。
例如:我是一个对象,我有自己的年龄、性别、出生年月,这些都是我自己所具备的特征,我会说话、会走路、会吃饭,这些都是我们所具备的行为,我就是一个实实在在存在的个体,世界上有老人、有小孩、也有女人,这些就组成了庞大的人类,因此可以说人类是一个从同一事物中抽取出来而形成的类,而我就是这个类的一个实例。
对象的三个特性:
对象行为:可以对对象施加哪些操作。
对象状态:当施加操作时,对象如何响应。
对象标示:如何辨别具有相同行为与状态的不同对象。
1 类变量、成员变量和局部变量
类变量:定义在方法外面的变量,通常用static来修饰。
成员变量:也是定义在方法之外,作用于整个类中,不过没有修饰static,成员变量在堆内存中,依存对象存在
局部变量:定义在方法内部,作用于函数中的语句中。局部变量存在栈内存中
- class CalssDemo
- {
- static String s="我是类变量";
- String s1="我是成员变量";
- public void method(){
- String str="我是局部变量"
- }
- public static void main(String[] args)
- {
- System.out.println("Hello World!");
- }
- }
2 匿名对象
- class CalssDemo1
- {
- publicstatic void method(CalssDemo1 cd){
- }
- publicstatic void main(String[] args)
- {
- CalssDemo1cd=new CalssDemo1();
- //匿名对象
- method(newCalssDemo1() );
- }
- }
A:当对对象的方法只调用一次时可以使用匿名对象来完成,比较简洁。
B:如果是调用多次的话必须要给对象起个名字。
C:可以将匿名对象作为实际参数进行传递。构造函数
特点:
函数名与类名相同 ,不用定义返回值类型,不可以写runturn语句
作用: 给对象进行初始化。
注意: 默认构造函数的特点,对个构造函数是以重载的形式存在。
对象一建立就会调用与之对应的构造函数。构造函数作用与给对象初始化。
细节: 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。如果定义自己的构造对象则不建立默认的构造函数。
构造函数和一般函数不同
在写法上不同。
在运行上不同,构造函数一建立就运行,已办方法是对象调用才执行,给对象添加所具备的功能。
一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。
什么时候用构造函数?
当分析事物时,该事物具备一些特性或行为,那么将内容定义到构造函数中。
构造代码块
作用:给对象进行初始化,对象一建立就运行,而且优于构造函数执行。
构造代码块和构造函数的区别
构造代码块是给所有对象进行统一化初始化。而构造函数时给对应的对象初始化。
4 static 修饰符
(1)作用:是一个修饰符,用于修饰成员变量或成员函数。静态修饰的内容被对象所共享。
当成员被静态修饰后,就多了一种调用方式,除了被对象调用外,还可以直接被类名调用。写法:类名.静态成员。
特点;
1. 随着类的加载而加载。也就是说,他随着类的消失而消失。
2.优先于对象存在。
3.被所有对象共享。
(2)实例对象和类对象的区别:
1.存放位置
类变量随着类的加载而加载,存放在方法区中。
实例变量随着对象的建立而存在于堆内存中。
2.生命周期不同
类变量生命周期最长,随着类的消失而消失。
实例对象随着对象的消失而消失。
(3)静态使用注意事项
静态方法总只能访问静态成员或函数。
非静态方法中既可以访问非静态也可以访问静态。
静态方法中可以定义this,super关键字因为静态优先于对象存在,所以静态方法中不可以出现this。
(4)静态的利弊
利:对对象的共享数据单独空间存储。节省空间,没有必要每个对象都存储一份。可以被类名直接调用。
弊: 生命周期过长,访问权限受限制。
(5)什么时候使用静态(成员变量和 成员函数)
成员变量:当对象中出现共享数据时,可以定义为静态成员。对象中的特有数据要定义成非静态存在于堆内存中
静态函数:当功能内部没有访问到静态数据时,可以定义为静态的。
(6)静态的应用
每个程序都有共性的功能,可以将这些功能抽取,独立封装,以便复用。
5 final 修饰符
A:作为一个修饰符。可以修饰变量、函数、类。
B:被final修饰的类不能被继承。
C:被final修饰的方法不能被重写。
D:被final修饰的变量(成员变量和局部变量),成为一个常数,只能赋值一次。当事物为固定值时,那么为了增强阅读性,都给这些值取一个名字,而这些值不需要改变,所以加上final修饰。
E:常量的书写格式为所有字母都需要大写,如果多个单词组成则单词间通过_下划线来连接。
F:内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
6主函数
主函数是一个特殊的函数,可以被jvm调用。作为程序的入口。
public :代表函数的访问权限最大。
static:代表随着类的加载而存在了。
void:主函数没有具体的访问值。
main:不是关键字,是特殊的单词,被jvm识别。
(string[ ] arr):函数的参数,参数类型是一个数组,该数组的元素是字符串,表示字符串的数组。
主函数是固定格式的,被jvm识别。
7 静态代码块
格式:static { 执行语句 } 给类初始化
构造代码块:{ 执行语句 } 给对象初始化
特点:随着类的加载而加载,只执行一次。并且优先于main函数执行。
Java代码块
一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种:
(1)普通代码块:就是类中方法的方法体
public void xxx(){
//code
}
(2)构造块:用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象
时都会被调用,并且优先于类构造函数执行。
{
//code
}
(3)静态块:用static{}裹起来的代码片段,只会被执行一次(第一次加载此类时执行,比如说用Class.forName("")加载类时就会执行
static block),静态块优先于构造块执行。
static{
//code
}
(4)同步代码块:使用synchronized(obj){}裹起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则
会导致数据的不一致性。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁
如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。
一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码
裹在synchronized block,既能够实现同步访问,也能够减少同步引入的开销。
synchronized(obj){
//code
}
执行顺序:静态代码块<静态函数(不调用时不显示,先加载进来)<主函数<构造代码块<构造函数<普通代码块
8 帮助文档的制作
将class文件发送给别人时,其他人只要将该类设置到classpath路径下,就可以使用该类,但是他并不能打开查看这个文件的内容,也没法看到该类的方法和参数的具体作用。
在Java中我们可以制作帮助文档,让别人再不看到代码的情况下就可以使用。
帮助文档生成格式:
/**
@author 作者名字
@version 版本号
@param 参数名类型
@return 返回值类型
*/