——- android培训、java培训、期待与您交流! ———-
JAVA自学系列
期待与您的交流
一、面向对象:
是一种编程思想,与面向过程不同,不过是基于面向过程的
三个特征:
封装
继承
多态
面向对象思想开发,每当需要实现一个功能的时候,就寻求实现该功能的对象,如果没有那么就创建一个
类和对象的关系
类:是对现实事物的描述
对象:是这类事物的真实存在
类中可以定义变量,也叫做类的成员变量,简单解释为这个类或者说对象的属性,而函数也可以说是这个对象的功能。
成员变量和局部变量的区别就在于存储位置不同,成员变量存在对内存,而局部变量存在栈内存
二、匿名对象
当对象的方法只调用一次的时候,可以使用匿名对象来完成,同时匿名对象也可以作为实际参数进行传递
然而如果要对一个对象进行多个成员调用,则必须给对象命名
三、封装
隐藏对象的属性和实现细节,仅对外提供公共的访问方式,即接口
好处:将变化隔离
便于使用
提高重用性
提高安全性
封装的原则:把不需要对外提供的内容隐藏起来,把属性都隐藏,提供公共方法对其访问
封装的一种常见方式:private修饰,即私有属性
一般来说,对象中的属性都设置为私有,如果要对其操作需要调用对象的功能,因此一个对象中的每个属性通常都至少有两种对应的方法,一个是设置,一个是获取。
如
class 类名
{
private int 成员变量;
public void定义函数()
{
执行语句;
}
}
成员变量为属性,private定义其为私有,即完成对属性的封装
定义函数为功能,public定义其为共有,即可以被外部访问
四、方法
方法即为类或者说对象中的功能
包括普通方法,构造方法,还有构造代码块
其中构造方法为函数名与类名完全相同,这类方法是在调用类new一个新的对象的时候变回自动调用,用来给新对象赋初始值
构造方法可以被重载
构造代码块是一种类似构造方法的,方法。构造代码块没有含属性,所以也没有形式参数,因此可以用来给所有类型的对象统一进行初始化赋值,例如:
void
{
属性a=1;
属性b=2;
}
void 类名(int x)
{
属性a=x;
}
void为函数修饰符,构造代码块没有函数名,但是可以使用所有的修饰符进行修饰
类名(int x)为一个构造函数
此时我们给出new对象所有形式的初始值,无论是()(x)(x,y)代码块中的赋值都必然会执行而且是最优先执行,然后再执行相符合的构造方法。
五、
this关键字
1.用来区分局部变量和成员变量
int x
void 函数名(x)
{
this.x = x;
}
this.x就代表当前对象的x,而如果没有this.,则x为函数的局部变量x
2.构造函数间的调用
person(String name)
{
this.name = name;
}
person(String name,int age)
{
this(name);//这个this(name),调用上面构造函数中的name值
this.age = age;
}
六、
static关键字
修饰符,被修饰的属性或者方法将被标记为静态
特点: 随着类的加载而加载
优先于所有的对象存在
被所有对象所共享
可以直接被类名所调用
静态方法只能访问静态成员
非静态方法可以访问静态可非静态
静态方法中不可以定义this,super
利:对对像的共享数据进行单独空间存储,节省空间
可以直接被类名调用
弊:生命周期过长
访问存在局限性
七、
main关键字
public static void main(String[] args)
作为程序入口
public代表该函数访问权限最大
static代表主函数随类的加载存在
void主函数没有也不需要有返回值
main不是关键字,但是是一个特殊的单词或者说方法
args,只是String[]定义的一个变量,可以随意更改
**************************************************************************************************************************************************************
用一个函数来稍微演示一下面向对象,以下为自定义的一个ObDemo类
//ObDemo,作用:演示面向对象相关操作
/*
包含:
私有属性:String obName,int obSize
代码构造块:1
构造函数和其重载:ObDemo(),
ObDemo(String name),
ObDemo(String name,int size)
普通函数:obRead(),
obSet(int size),
obSet(String name)
*/
/*
1.创建类
2.为了演示属性,创建私有类型属性String obName;int obSize
3.创建构造代码块,
4.创建构造函数
5.构造函数的两个重载函数
6.两个普通函数,一个用来读取对象属性,一个用来更改对象属性
*/
class ObDemo
{
//obDemo的私有属性
private String obName;
private int obSize;
//构造代码块,功能是给所有对象进行统一的初始化,优先级最高
{
System.out.println("构造代码块");
}
//构造函数
ObDemo()
{
System.out.println("构造函数||obName:"+obName+";obSize:"+obSize);
}
//构造重载一
ObDemo(String name)
{
obName = name;
System.out.println("构造函数的重载一||obName:"+obName+";obSize:"+obSize);
}
//构造重载二
ObDemo(String name,int size)
{
obName = name;
obSize = size;
System.out.println("构造函数的重载二||obName:"+obName+";obSize:"+obSize);
}
//普通函数,读取对象属性
public void obRead()
{
System.out.println("读取对象属性||obName:"+obName+";obSize:"+obSize);
}
//普通函数,设置对象属性,此处先打印对象原属性,然后更改size再打印一次
public void obSet(int size)
{
System.out.println("设置对象属性||obName:"+obName+";obSize:"+obSize);
obSize = size;
System.out.println("size更改为:"+size);
//设置完调用obRed打印结果,同理,上面几个构造函数中,也是可以调用此函数
obRead();
}
public void obSet(String name)
{
System.out.println("设置对象属性||obName:"+obName+";obSize:"+obSize);
obName = name;
System.out.println("name更改为:"+name);
//设置完调用obRed打印结果,同理,上面几个构造函数中,也是可以调用此函数
obRead();
}
}
然后将一部分代码做如下更改
ObDemo(String name,int size)
{
this(name);
obSize = size;
System.out.println("构造函数的重载二||obName:"+obName+";obSize:"+obSize);
}