笔记——Java基础[03-面向对象概述]
2014-07-21 10:00
344 查看
3.1 面向对象的概念
1、面向过程:强调的是功能性为。面向对象:将功能封装进对象,强调了具备功能的对象。
2、面向对象三个特征:封装、继承、多态。
3、开发就是找对象使用,没有对象就创建一个对象。
3.2 类与对象的关系
1、类:对现实生活中事物的描述。对象:就是这类对象,实实在在存在的个体。
2、描述事物就是描述属性和行为(成员变量和成员函数)。
3、可以多个引用指向同一个对象。
4、成员变量作用于整个类中,局部变量作用于函数中或者语句中。成员变量在堆内存中,因为对象的存在才在内存中存在。局部变量:存在栈中。
5、在定义的类中也可以定义主函数,表示这个类可以独立的运行,不过一般不这样写。
6、匿名对象是对象的简化形式。匿名对象两种使用情况:(1)当对对象方法仅进行一次调用的时,多次成员调用必须起名字。(2)匿名对象可以作为实际参数进行传递,例如show(new Car())。
![](http://img.blog.csdn.net/20140721095705609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzU0NTIyMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.3 封装
1、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2、权限修饰符。private:私有,用于修饰类中的成员(包括成员,成员函数),私有仅仅是封装的一种形式。
3、setAge(),getAge(),之所以提供访问方式,就因为可以在访问方式中加入逻辑判断语句。
3.4 构造函数
1、特点:(1)函数名与类名相同,(2)不用定义返回值类型,(3)不可以写return语句。
2、对象已建立就调用构造函数,同c++。当无显示构造函数时,自动给该类加一个Person(){}样的构造函数。
3、构造函数可以重载!
4、构造函数没法显示调用,在对象创建的时候自动调用。一般函数可以被调用多次。
5、构造代码快,作用:给对象进行初始化,对象一建立就运行,优于构造函数执行。区别:构造函数是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。因为构造函数可以有多个,每个对象对应某个。既共性的定义在构造代码快。
3.5 this关键字
1、this:看上去是区分去不变量和成员变量的区别。this代表它所在函数所属对象的引用。变量出现重名的情况时候必须加,其他情况可省略。
2、this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
3、构造函数间调用只能用this语句,且只能定义在第一行,因为初始化要先执行。例如:this(name)。
4、this语句有可能出现死循环,注意避免。
3.6 static关键字
1、用法:是一个修饰符,用于修饰成员(成员变量和成员函数)。静态修饰内容被对象所共享。
2、当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员。
3、类变量(成员、函数)随着类的加载存放在共享区(方法区、数据区)。
4、特点:
(1) 静态的(类变量)随着类的加载(消失)而加载(消失),非静态的(成员变量、实例变量)对象创建时才创建。
(2)优先于对象存在。
(3)被所有用户所共享。
(4)可以直接被类名调用。
5、为什么不把所有都定义为静态:
(1)和现实世界相对应。
(2)对内存消耗很大。
6、使用注意事项:
(1)静态方法只能访问静态成员(方法和变量),非静态可以访问非静态和静态的。
(2)静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this字样。
(3)主函数是静态的。
7、静态有利有弊:
利:对对象的共享数据进行单独空间的存储,没有必要每个对象都存储一份。可以直接被类名调用。
弊:生命周期过长,访问出现局限性。(静态虽好,只能访问静态。)
8、主函数:是一个特殊的函数,作为程序的入口,可以直接被jvm调用。
主函数的定义:public代表函数的访问权限是最大的。
static:表示主函数随着类的加载已经存在了。
void:函数无返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm检测到。
(String [] args):函数的参数,参数的类型是一个数组,该数组中的元素是字符串。字符串类型的数组。args是来自 arguments(参数),但是也可以改。
jvm在调用主函数的时候传入的是new String[0]
9、是什么时候静态:
(1)静态变量:当对象中出现共享数据时。
(2)静态函数:当功能内部没有访问到非静态数据(对象的特有数据)时。可以用类名直接调用。
10、静态的应用:
(1)可以定义某些类只包含操作函数,例如视频中的ArrayTool,建了ArrayTool的对象后,可以使用里边封装的函数。
(2)但是ArrayTool并没有封装特有数据,函数也没有用到特有数据。
(3)所以是不需要对象的,可以将ArrayTool中的函数定义成static的,直接通过类名调用即可。
(4)但是该类还是可以被其他程序建立对象。为了更为严谨,强制让该类不能创建对象,可以通过将构造函数私有化完成。
10、要生成文档的类必须是公有的,加public。私有的不再文档中显示。
11、一个类中默认会一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。类是public的,则构造函数也是public的。
12、API 应用程序接口。
13、JDK API 就是java的文档。
14、静态代码块:
格式
作用:用于给类初始化的。
区别:静态代码块给类初始化,构造代码块给对象初始化,构造函数给对应对象初始化的。顺序也是这个顺序。
15、对象的构造过程Person p = new Person("zhangsan", 20);
该句话都做了什么事情?
(1)应为new 用了Person.class,所以会先找到Person.class文件并加载到内存中。
(2)执行该类的静态代码快(如果有的话),给Person.class类进行初始化。
(3)在堆内存中开辟空间,分配内存地址。
(4)在堆内存中建立对象的特有属性,并进行默认初始化(指的是null和0)。
(5)对属性进行显示初始化(指的是例如String name = “哈哈”)。
(6)对属性进行构造代码块初始化。
(7)对属性进行与之对应的构造函数初始化。
(7)将内存地址赋给栈内存中p变量。
3.7 单例设计模式
1、设计模式:解决某一类问题最行之有效的方法:java中有23种设计模式。其中一种叫单例设计模式:解决一个类在内存中只有一个对象。
2、想要保证对象唯一:
(1)为了 避免其他程序过多建立该类对象,先禁止其他程序建立对象。
(2)还为了让其他程序可以访问该类对象,只好在本类中自定义一个对象。
(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
3、代码体现:
(1)将构造函数私有化。
(2)在类中创建一个本类对象。
(3)提取一个方法可以获取到该对象。
(饿汉式)
对象是方法被调用时才初始化,也叫做对象的延时加载。
Single类进内存时对象还没有存在,只有调用了了getInstance方法时,才建立对象。
4、当需要保证唯一时将上述三步加上即可。
5、建议使用饿汉式。
1、面向过程:强调的是功能性为。面向对象:将功能封装进对象,强调了具备功能的对象。
2、面向对象三个特征:封装、继承、多态。
3、开发就是找对象使用,没有对象就创建一个对象。
3.2 类与对象的关系
1、类:对现实生活中事物的描述。对象:就是这类对象,实实在在存在的个体。
2、描述事物就是描述属性和行为(成员变量和成员函数)。
3、可以多个引用指向同一个对象。
4、成员变量作用于整个类中,局部变量作用于函数中或者语句中。成员变量在堆内存中,因为对象的存在才在内存中存在。局部变量:存在栈中。
class Car { //颜色 String color = "红色";//显示初始化 //轮胎数 int num = 4; //行为 void run() { System.out.println(color+".."+num); } } class Demo { public static void main(String[] args) { //通过new操作符来完成。 Car c = new Car(); Car c1 = new Car(); c.color = "blue"; c1.color = "green"; c1 = c; c.run(); } }
5、在定义的类中也可以定义主函数,表示这个类可以独立的运行,不过一般不这样写。
6、匿名对象是对象的简化形式。匿名对象两种使用情况:(1)当对对象方法仅进行一次调用的时,多次成员调用必须起名字。(2)匿名对象可以作为实际参数进行传递,例如show(new Car())。
3.3 封装
1、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2、权限修饰符。private:私有,用于修饰类中的成员(包括成员,成员函数),私有仅仅是封装的一种形式。
3、setAge(),getAge(),之所以提供访问方式,就因为可以在访问方式中加入逻辑判断语句。
3.4 构造函数
1、特点:(1)函数名与类名相同,(2)不用定义返回值类型,(3)不可以写return语句。
2、对象已建立就调用构造函数,同c++。当无显示构造函数时,自动给该类加一个Person(){}样的构造函数。
3、构造函数可以重载!
4、构造函数没法显示调用,在对象创建的时候自动调用。一般函数可以被调用多次。
5、构造代码快,作用:给对象进行初始化,对象一建立就运行,优于构造函数执行。区别:构造函数是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。因为构造函数可以有多个,每个对象对应某个。既共性的定义在构造代码快。
3.5 this关键字
1、this:看上去是区分去不变量和成员变量的区别。this代表它所在函数所属对象的引用。变量出现重名的情况时候必须加,其他情况可省略。
Person(String name) { this.name = name; }
2、this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
3、构造函数间调用只能用this语句,且只能定义在第一行,因为初始化要先执行。例如:this(name)。
Person(String name) { this.name = name; }
Person(String name, int age)
{
this(name);
this.age = age;
}
4、this语句有可能出现死循环,注意避免。
3.6 static关键字
1、用法:是一个修饰符,用于修饰成员(成员变量和成员函数)。静态修饰内容被对象所共享。
2、当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员。
3、类变量(成员、函数)随着类的加载存放在共享区(方法区、数据区)。
4、特点:
(1) 静态的(类变量)随着类的加载(消失)而加载(消失),非静态的(成员变量、实例变量)对象创建时才创建。
(2)优先于对象存在。
(3)被所有用户所共享。
(4)可以直接被类名调用。
5、为什么不把所有都定义为静态:
(1)和现实世界相对应。
(2)对内存消耗很大。
6、使用注意事项:
(1)静态方法只能访问静态成员(方法和变量),非静态可以访问非静态和静态的。
(2)静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this字样。
(3)主函数是静态的。
7、静态有利有弊:
利:对对象的共享数据进行单独空间的存储,没有必要每个对象都存储一份。可以直接被类名调用。
弊:生命周期过长,访问出现局限性。(静态虽好,只能访问静态。)
class Person { String name; static String country = "CN"; public static void show()//注意会报错,因为静态只能访问静态。name不是静态。 { System.out.println(name+"::"+country); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); //p.name = "zhangsan"; //p.show(); //System.out.println(Person.country); Person.show(); } }
8、主函数:是一个特殊的函数,作为程序的入口,可以直接被jvm调用。
主函数的定义:public代表函数的访问权限是最大的。
static:表示主函数随着类的加载已经存在了。
void:函数无返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm检测到。
(String [] args):函数的参数,参数的类型是一个数组,该数组中的元素是字符串。字符串类型的数组。args是来自 arguments(参数),但是也可以改。
jvm在调用主函数的时候传入的是new String[0]
9、是什么时候静态:
(1)静态变量:当对象中出现共享数据时。
(2)静态函数:当功能内部没有访问到非静态数据(对象的特有数据)时。可以用类名直接调用。
10、静态的应用:
(1)可以定义某些类只包含操作函数,例如视频中的ArrayTool,建了ArrayTool的对象后,可以使用里边封装的函数。
(2)但是ArrayTool并没有封装特有数据,函数也没有用到特有数据。
(3)所以是不需要对象的,可以将ArrayTool中的函数定义成static的,直接通过类名调用即可。
(4)但是该类还是可以被其他程序建立对象。为了更为严谨,强制让该类不能创建对象,可以通过将构造函数私有化完成。
10、要生成文档的类必须是公有的,加public。私有的不再文档中显示。
11、一个类中默认会一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。类是public的,则构造函数也是public的。
12、API 应用程序接口。
13、JDK API 就是java的文档。
14、静态代码块:
格式
static { System.out.println("a"); }特点:随着类的加载只执行一次。
作用:用于给类初始化的。
区别:静态代码块给类初始化,构造代码块给对象初始化,构造函数给对应对象初始化的。顺序也是这个顺序。
class StaticCode
{
static { System.out.println("a"); }
/*public static void show()
{
System.out.println("show run");
}
如果StaticCode没有对象,但是通过StaticCode.show调用,也加载静态代码块。
*/
}
class StaticCodeDemo
{
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("over");
}
static
{
System.out.println("c");
}
}
//输出结果是b c a over。注意只有一个a
15、对象的构造过程Person p = new Person("zhangsan", 20);
该句话都做了什么事情?
(1)应为new 用了Person.class,所以会先找到Person.class文件并加载到内存中。
(2)执行该类的静态代码快(如果有的话),给Person.class类进行初始化。
(3)在堆内存中开辟空间,分配内存地址。
(4)在堆内存中建立对象的特有属性,并进行默认初始化(指的是null和0)。
(5)对属性进行显示初始化(指的是例如String name = “哈哈”)。
(6)对属性进行构造代码块初始化。
(7)对属性进行与之对应的构造函数初始化。
(7)将内存地址赋给栈内存中p变量。
3.7 单例设计模式
1、设计模式:解决某一类问题最行之有效的方法:java中有23种设计模式。其中一种叫单例设计模式:解决一个类在内存中只有一个对象。
2、想要保证对象唯一:
(1)为了 避免其他程序过多建立该类对象,先禁止其他程序建立对象。
(2)还为了让其他程序可以访问该类对象,只好在本类中自定义一个对象。
(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
3、代码体现:
(1)将构造函数私有化。
(2)在类中创建一个本类对象。
(3)提取一个方法可以获取到该对象。
(饿汉式)
class Single { private Single(); private static Single s = new Single(); public static Single getInstance(); { return s; } } class SingleDemo { public static void main(String [] args) { Single ss = Single.getInstance(); } }(懒汉式)
class Single { private static Single s= null; private static Single(){}; public static Single getInstance(); { if (s == null) s = new Single(); return s; } }
对象是方法被调用时才初始化,也叫做对象的延时加载。
Single类进内存时对象还没有存在,只有调用了了getInstance方法时,才建立对象。
4、当需要保证唯一时将上述三步加上即可。
5、建议使用饿汉式。
相关文章推荐
- Java基础知识强化之集合框架笔记03:Collection集合的功能概述
- 笔记整理(java基础三-------面向对象--封装)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 黑马程序员--Java基础--03面向对象(1)
- 学习笔记 Java_毕向东_Java概述_语言基础 2014.7.28
- 黑马程序员_Java基础_面向对象_03
- 笔记——Java基础[03-面向继承(上)]
- 笔记整理(java基础四-----面向对象---继承)
- Java基础学习笔记_面向对象2
- 黑马程序员—Java基础学习笔记之面向对象
- 黑马程序员_Java基础_面向对象(概述、类与对象关系、成员变量、封装private、构造函数和构造代码块、this关键字)
- JAVA学习笔记——JAVA基础语法(三)——面向对象三大特征
- 黑马程序员 Java基础<一>面向对象与类概述
- Java基础:第二十三讲 面向对象概述
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 黑马程序员 Java基础<一>---> 面向对象与类之概述(匿名对象、封装、构造函数、this、静态等)
- java学习笔记_03_面向对象
- 笔记——Java基础[01-Java概述]
- JAVA 基础笔记|面向对象
- 黑马程序员_java基础笔记(03)...面向对象