您的位置:首页 > 编程语言 > Java开发

Java学习笔记(面向对象1)

2015-11-14 13:39 274 查看

面向对象

1.何为面向对象

面相对象是相对面向过程而言的

面相对象和面向过程都是一种思想

面向过程

强调功能行为

面向对象

将功能封装进对象,强调具备了功能的对象。

面向对象是基于面向过程的。

2.类与对象

类就是对现实生活中事物的描述;

对象则是这类事物,实实在在存在的个体;

描述类时,有属性(成员变量)和行为(成员方法);

成员变量与局部变量

成员变量作用于整个类中;

局部变量作用于函数中或者语句中;

成员变量在堆内存中,因为对象的存在才在内存中存在;

局部变量在栈内存中

3.匿名对象

使用:

当对对象的方法只调用一次,可以使用匿名对象来完成,这样较为简化;若对一个对象进行多个成员调用,必须给这个对象起个名字;

可以将匿名对象作为实际参数进行传递。

4.封装

封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式;

好处:

将变化隔离

便于使用

提高重用性

提高安全性

封装原则:

将不需要对外提供的内容都隐藏起来

把属性都隐藏,提供公共方法对其访问

4.1 private

私有只在本类中有效

一个成员变量(私有属性)通常对应两个访问方式,一个是设置set一个是获取get;

局部变量必须初始化值,成员变量不需要初始化值,有系统默认

5.构造函数

5.1特点:

函数名与类名相同

不用定义返回值类型

不可以写return语句

5.1作用:

给对象进行初始化。即对象一建立,就会调用与之对应的构造函数

5.3注意:

默认构造函数的特点;

多个构造函数是一重载的方式存在的;

当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数;

构造函数在对象一建立就运行,给对象初始化,而一般函数是对象调用才执行,给对象添加对象具备的功能;

一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次;

当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中;

5.4构造代码块

作用:给对象进行初始化,对象一建立就运行,并优先于构造函数执行

构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化

6.关键字

6.1 this关键字

作用:用于区分局部变量和成员变量同名的情况;

this代表本类的对象;哪个对象调用this所在的函数,this就代表哪个对象;即this代表它所在函数所属对象的引用

应用:

当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示对象

构造函数之间调用只能使用this关键字;

this的调用必须放在构造函数第一句,因为初始化要先执行;

6.2 static关键字

6.2.1 作用:

修饰符,用于修饰成员(成员变量,成员函数),被修饰后成为类变量;

当成员被静态修饰后,便多一个调用方式,除了可以被对象调用外,还可以直接被类名调用(类名.静态变量)。

6.2.2 特点:

static修饰的变量存在于随着类的加载而加载,随着类的消失而消失;说明其生命周期最长;

优先于对象存在,即静态是先存在的,对象是后存在的;

被所有对象共享

可直接被类名所调用

ps:实例变量与类变量的区别

存放位置

类变量随着类的加载而存在于方法区中;实例变量随着对象的建立而存在于堆内存中;

生命周期

类变量生命周期最长,随着类的消失而消失;

实例变量生命周期随着对象消失而消失;

6.2.3 使用注意事项:

静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态;

静态方法中不可以定义this,super关键字,因为静态优先于对象存在;

主函数为静态。

6.2.4 优缺点:

优点:

对对象的共享数据进行单独空间的存储,节省空间,没必要对每一个对象都存储一份;

可以直接被类名调用。

缺点:

生命周期过长;

访问出现局限性(只能访问静态)。

6.2.5 何时使用:

何时定义静态变量(类变量):当对象出现共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态存在于堆内存中;

只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。

何时定义静态函数:当功能内部没有访问非静态数据(对象的特有数据),则该功能可以定义为静态的。

简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,但是非静态需要被对象调用。如果没有访问特有数据的方法,该对象的创建是没有意义。

6.2.5 静态的应用:

每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以重复使用

6.2.5 静态代码块:

特点:

随着类的加载而执行,只执行一次,用于给类进行初始化;

优先于主函数执行;(如例1)

只有类 加载的时候才会执行静态代码块。(如例2)

例1

class StaticCode{

static

{

System.out.print(“a”);

}

}

class StaticCodeDemo{
static
{
System.out.print("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.print("over");
}
static{
System.out.print("c");
}
}


输出结果:bcaover

例2

class StaticCode{

static

{

System.out.print(“a”);

}

public static void show(){

System.out.print(“show run”);

}

}

class StaticCodeDemo{
static
{
System.out.print("b");
}
public static void main(String[] args)
{
StaticCode s = null;
}
static{
System.out.print("c");
}
}


输出结果:bcover

By the way说一下构造代码块,如下例:

class StaticCode{

int num = 9;

StaticCode()//构造函数,给对应对象初始化

{

System.out.println(“b”);

}

static
{
System.out.print("a");//静态代码块,给类初始化
}
{
System.out.print("c"+9);//构造代码块,给对象初始化
}

StaticCode(int x)//构造函数,给对应对象初始化
{
System.out.println("d"+x);
}
public static void show(){
System.out.print("show run");
}
}

class StaticCodeDemo{
public static void main(String[] args)
{
new StaticCode(4);
}
static{
System.out.print("e");
}
}


输出结果:eac9d4

7.main函数

public static void mian(String[] args);

主函数是一个特殊的函数,作为程序的入口,可以被jvm(虚拟机)调用。

主函数的定义:

public:代表该函数访问权限是最大的;

static:代表主函数随着类的加载就已经存在了;

void:主函数没有具体返回值;

main:不是关键字,但是是一个特殊字符,可以被jvm识别;

(String[] args):函数的参数,参数类型是一个字符串类型数组,该数组中的元素是字符串;

主函数为固定模式,jvm唯一识别格式

args为参数名,可更改;

jvm在调用主函数时,传入的是new String[0];

例如:

class MainDemo

{

public static void main(String[] args){

System.out.println(args);

}

}

执行结果:



例如1:

class MainDemo

{

public static void main(String[] args){

System.out.println(args.length);

System.out.println(args.[0]);

}

}

编译后输入数值:



例如2:

class MainDemo

{

public static void main(String[] args){

String[] arr ={“hehe”,”haha”,”heihei”,”xixi”};

MainTest.main(arr);

}

}

class MainTest(){

public static void main(String[] args){

for(int x=0; x
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: