本帖最后由 空白心 于 2015-6-9 08:48 编辑
第一:面向对象概述
面向对象是一种对现实世界的物和关系的一种抽象的理解方法,
将现实中的物抽象成对象,而关系则被抽象成类,继承等等.通俗点说.对象是类的实例.类是对象的抽象.
使用面向对象会大幅度的提高效率等等好处
1.面向对象特征
封装,继承,多态
面向对象的特点:
1;面向对象是一种思想,是符合现在人们思考习惯的一种思想
2;面向对象的出现将复杂问题简单化
3;面向对象将过程中的执行者,转换成了指挥者。
面向对象基于面向过程,将过程进行封装到了对象中。
解决问题先找具备所需功能的对象 如果没有就制造一个具备所需功能的对象
Arrays.sort(arr);//java自带的排序Arrays.sort
类与对象的关系
类是用于描述对象。是事物的描述。
对象:是该类事物存在的个数(实体)。
//用java语言描述。类来体现
//其实描述事物无非就是描述该事物的属性和行为
在类中的体现
属性:成员变量
行为:成员函数
其实描述类就是在定义成员(成员变量和成员函数)
成员变量和局部变量的区别?
1;定义的位置不同
成员变量定义在类,作用于整个类
局部变量定义在函数,作用于整个函数,或者定义在语句,作用于语句内
2;内存出现的时间和位置不同
成员变量:当对象创建时,出现在堆内存的对象当中
局部变量:所属区间被运算时,出现在栈内存中
3;生命周期不同
成员变量:随着对象的出现而出现,随着对象的消失而消失
局部变量:随着所属区间运算结束,立刻被释放
4;初始化值
成员变量:因为在堆内存中,都有默认初始化
局部变量:没有默认初始化
匿名对象,没名字的对象
匿名对象的使用:
1,当对象对方法进行一次调用的时候,可以使用匿名对象来简化
当对对象的成员进行多次调用时,必须起名字
2;可以将匿名对象作为实际参数进行传递
private私有化。
class Person
{private int age;
//通常情况下,会将类中的成员变量私有化,为了避免属性直接被访问导致数据错误。并对外提供了公共的访问方式,对该属性进行访问。
这样的好处:可以对属性进行可控
而对属性访问的公共方法名称规范定义格式是:set属性(),get属性()
记住:私有仅仅是封装的一种体现形式而已。
私有:private是一个关键字,权限修饰符。用于修饰成员(成员变量和成员函数)
public void setAge(int a)
{ if(a>0&&a<130)
age=a;
else
System.out.println("年龄非法");
}
public int getAge()
{ return age;
}
public void speak()
{ System.out.println("age=”+age);
}
}
class PersonDemo
{
public static void main(String[]args)
{
Person P=new Person();
//给该对象指定年龄值
产生的原因:对象直接访问age变量造成了赋值错误
解决:不让对象直接访问就可以 可以通过一个关键字对该变量进行修饰。private 私有
私有的数据只在本类中有效。
其他程序创建对象是无法直接访问的。
解决:在本类中私有,但是为了便于其他类对其访问,可以对外提供一些公共的方法来完成
p.setAge(20);
p.speak();
}
}
调用输出
class Car
{
String color;
int num;
public void run()
{
System.out.println(num+":"+color);
}}
class Care
{
public static void main(String[]args)
{
Car p=new Car();
Car p1=new Car();
Show(p);
Show(p1);
}
public static void Show(Car p)
{ p.color="bulck";
p.num=6;
p.run();}}
构造函数:
特点: 任何用class定义的类中,都有一个默认的空参数的构造函数。
用于给该类对象进行初始化。
创建的每个对象都是一个实体,每个实体必须要进行初始化后才可以使用
实体的初始化是需要通过动作完成的
这个动作就是构造函数
构造函数作用:
给对象进行初始化
构造函数和一般函数的不同
1,在书写格式上不同
2;运行上的不同
构造函数,是在对象一创建就被调用了,而且只执行一次;
一般函数,是对象创建完成后,所需时,才会被调用,可以被调用多次
Person()
{
System.out.println{"person run"};
//return;构造函数是有return语句的,用于结束构造函数的初始化动作。
}
当一个类中存在着多个构造函数时,它们的存在形态是重载。
构造函数什么时候用:
当描述事物时,该事物一存在就具备着一些属性和行为,那么就将这些内容定义在构造函数中。
this:代表的是一个对象
代表哪个对象呢?
哪个对象调用this所在的函数,this就代表哪个对象
this就是当前对象的一个引用
this:表现形式一:当局部变量和成员变量同名的时候,可以用this来区分。
表现形式二:构造函数之间的调用可以使用this关键字,后面跟上小括号,指定具体的实参即可明确要调用的构造函数
特殊情况:注意:调用本类中构造函数的this语句必须定义在构造函数的第一行
因为初始化动作要先完成。
this什么时候用?
当定义功能时,功能内部使用到了调用该功能的对象
这时就用this来表示
局部代码块和构造代码块
class Person
{
//构造代码块,它可以给所有对象进行初始化
}
class Demo
{
public static void main(String[]args)
{
{
//局部代码块,控制变量的生命周期
}
static关键字 特点
static 关键:
1;被static 修饰的成员变量,被所有对象所共享
2;静态随着类的加载而加载,随着类的消失而消失
3,优先于对象存在
4;静态成员可以直接被类名所调用
class Person
{
String name;
static String country="China"
//想要将对象中的相同数据进行对象的共享,就可以对该数据进行修饰
//该修饰符就是static
}
class StaticDemo
{
public static void main(String[]args)
{ //静态存在时,还没有对象,要被调用此时只有类可以完成。
静态成员多了一种调用方式 类名.静态成员。
System.out.println(Person.country);
}
static的使用注意事项
1;静态方法只能调用静态成员,不能调用非静态成员。
非静态方法可以调用静态成员,也可以调用非静态成员。
2;在静态方法中不允许出现this,super关键字
this代表对象,而静态方法执行时还没有对象呢!
3;主函数是静态的
静态是有访问局限性的,只能访问静态的内容。
class StaticDemo
{
int x=4;
public static void main(String[]args)
{
new StaticDemo().show();
//调用成员有两种方式,一个是对象,一个是类(必须要保证被调用的是静态成员
}
public void show()
{
System.out.println("x="+x);
} }
静态成员变量(类变量)和非静态成员变量(实例变量)的区别?
1;非静态成员变量又称为实例变量。
静态成员变量又称为类变量。
2;非静态成员变量,随着对象的创建而存在,随着对象的消失而消失。
静态成员变量,随着类的加载而加载,随着类的消失而消失。
3;非静态变量存在于对象堆内存中
静态变量存在于方法去中。
4;非静态变量只能被对象所调用
静态变量可以被类名调用,也可以被对象调用。
main函数揭秘
public static void main(String[ ]args)
public:权限修饰符,公共,主函数的权限足够大。
static:静态修饰符,调用主函数不需要创建所在类对象对象,直接用类名即可
void:主函数是没有返回值的
main:固定的函数名称。jvm认识该名称并认识该名称定义的固定格式
(String[ ]args):主函数的参数列表,是一个字符串数组类型的参数
|
|