Java基础之面向对象(一)

一、面向对象

1、面向对象的概念

面向对象是相对面向过程而言的,面向过程是强调功能的过程行为,比如C语言,就大象放进冰箱的例子而言,面向过程是把冰箱打开;把大象放进去;关闭冰箱。二面向对象是冰箱打开;冰箱存储大象,冰箱关闭。典型的语言有Java,C++ ,C#等。

2、面对对象的特点

面对对象是是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。万物皆对象,种种事物都可以是对象。(注意面试的时候不要用)在实际编码中,不需要急着去做,先看看Java中有没有这个对象功能,如果对象不存在再去创建所需功能的对象。这样简化开发,提高了复用。

    在Java开发中,就是不断的创建对象,使用对象,让对象干活,过程就是在管理和维护对象之间的关系。

面对对象有三个特征:封装,继承,多态。

二、类与对象

看下图:

如图所示:类就是图纸。汽车就是堆内存中的对象。

1、类与对象的关系:类是对象是社会这事物的描述,Java是用类class来描述对象的属性和行为。定义类其实就是在定义类中的成员(成员变量和成员函数)。属性:对应类中的成员变量。行为:对应类中的成员函数。对象就是这类事物实实在在存在的个体。具体对象就是存放在堆内存中用new建立的实体。

2、成员变量与局部变量

作用范围:成员变量作用于整个类,局部变量在函数中,也就是所在的大括号内。

在内存中的位置:成员变量位于堆内存中,因为对象存在,才在内存中存在。局部变量存在于栈内存中。

3、匿名对象

就是对象的简化方式。调用方法有意义。调用变量无意义。

什么时候使用匿名对象

(1)对象只进行一次操作。多次调用必须起名字。

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

创建对象内存中发生了哪些事呢?

例如:Person p=new Person();

先将.class文件加载到内存;之后执行main方法,在栈内存中开辟了一个main方法空间,在main方法的栈里创建了一个变量p;接着在堆内存中开辟一个实体空间,并分配了一个内存的首地址;在实体空间中进行Person属性的空间分配,并进行默认初始化即各个属性值为null;接着对空间属性进行显示初始化即对各个属性赋值;最后将首地址值传给变量p。

三、封装(Encapsulation)

1、概念

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

2、好处

将变化隔离;

便于使用;

提高重用性;

提高安全性。

3、封装原则

把不要对外提供的内容隐藏起来。

把属性全部隐藏,对外提供公共的方法对其访问。

4、private(私有)关键字

private是一个权限修饰符。用于修饰成员(变量,函数),private修饰的成员只能在本类中使用。

常用方法:

将成员变量私有化,对外提供对应的set,get方法对其进行访问,这样提高了数据访问的安全性。

四、构造函数

1、构造函数的特点:名字与类名一致,不用返回值类型,不能使用return语句。

2、作用是给对象初始化。

如果一个类在定义时没有定义过构造函数,那么在类创建对象时会自己生成一个参数为空的构造函数,这就是默认构造函数;如果类中已经定义了构造函数了,那默认的构造函数就没有了。

下面是一个例子:

package com.itheima;

public class People {

	/**
	 * @param args
	 * 第能以一个People类包含属性姓名,年龄
	 */
	private String name;
	private int age;
	//定义一个无参的构造函数
	public People() {
		// TODO Auto-generated constructor stub
		System.out.println("我是无参构造函数");
		
	}
	//定义一个含参的构造函数
	public People(String name,int age)
	{
		this.name=name;
		this.age=age;
		System.out.println("我是有参构造函数");
		System.out.println("我的名字是"+name+",我的年龄是"+age);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建无参对象
		People p=new People();
		
		System.out.println("---------------------------");
		//创建有参对象
		People p1=new People("张三",22);
		
	}

}

运行结果如图:


从结果可以看出,创建对象时,如果对象有参数传进去的话,就调用有参数的构造函数,无参数的函数就不会调用。这里用到了this函数。下面来说一下this关键字的使用。

五、this关键字

从上述代码中,成员变量与构造函数中的形参的名称是一样的都是name,那么怎么可以区分它们到底是那一个变量呢?在Java语言中规定了this这个关键字来代表本类对象的引用,this就用于引用本类的成员变量和方法了。上述代码中,this.name是指类People中的成员变量name,而等号右边name是指构造函数中形参name,这个函数的功能就是将形参name的值传递给了成员变量name。

this与对象的关系:this其实就是本类的一个对象,在局部变量或方法涵盖了成员变量是,就要添加this关键字来明确引用的是类的成员变量。

注意,如果不带this,就只是把参数赋值给参数变量本身而已,成员变量的值并没有改变;用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。

另外,除了能调用本类的成员变量或成员函数之外,还可以作为返回值,即将类的对象返回。

this的调用方法:

this对象后面跟上 .  调用的是成员属性和成员方法(一般方法);

this对象后面跟上 () 调用的是本类中的对应参数的构造函数。

六、static关键字

被static修饰的变量,常量和方法被称为静态成员,静态成员属于类所有,当类加载时就存在,优先于对象存在,随着类执行完毕而消失,静态成员区别于个别对象,可以使用  类.成员 这个方法调用静态成员。

那么,什么时候需要static来修饰成员呢?

1、成员变量是否需要数据共享,即所有对象的这一属性都一样,是的话就需要用static修饰,否则就不用。

2、成员函数是否需要访问类中的特有数据即private修饰过的),需要访问就不要static修饰,否则就需要。

具体请看下面这个例子:

package com.itheima;

public class StaticTest {

	/**
	 * @param args
	 */
	//在类中定义静态常量
	static double PI=3.1415;
	//在类中定义静态变量
	private static int id;
	//在类中定义静态方法	
	public static void method1(){
		System.out.println("我是静态函数");
	}
	public void method2()
	{
		System.out.println(StaticTest.PI);//调用静态常量
		System.out.println(id);//调用静态变量
		StaticTest.method1();//调用静态方法
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StaticTest st=new StaticTest();
		st.method2();
	}
}
	
运行后的 效果图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值