`

黑马程序员_面向对象(二)

阅读更多

 ------- android培训java培训、期待与您交流! ----------

在上一篇的博文中已经介绍了基本的面向对象的知识,今天这篇博文主要介绍的有以下几个内容

1、成员变量和局部变量

2、匿名对象

3、封装

4、this关键字

5、构造方法

6、static关键字

1、成员变量和局部变量

成员变量是定义在类中的变量,而局部变量是定义在方法上或某个代码块中,比如for中等等

package day06;

public class ClassDemo01 {

	public static void main(String[] args) {
		Demo d = new Demo();
		d.method();
	}

}
class Demo{
	int num; //成员变量
	public void method(){
		int num2 = 5; //局部变量
		System.out.println("num:"+num+",num2:"+num2);
	}
}
运行结果

通过运行结果我们发现,num没有初始化也有值,这个值为0,而局部变量如果没有被初始化就使用的话,编译就会报错。

这边我们就需要说说成员变量和局部变量的区别:

1、定义的位置不一样,成员变量定义在类中方法以外,而局部变量则定义在方法的声明上或者一些代码块中

2、在内存中的位置不一样,成员变量定义在堆中,局部变量定义在栈中,定义在堆中的变量都会有一个初始化的值。

3、生命周期不一样,成员变量的随着对象的创建而创建,随着对象的消失而消失,局部变量是随着方法的调用而存在,随着方法调用完毕而消失。

4、初始化值不同,成员变量有默认初始化值,而局部变量没有,必须定义赋值后才能使用。

在开发中我们常常会将对象作为形参,那么这时候实际上需要的是一个对象,即是对对象的引用。


2、匿名对象,匿名对象其实就是直接new出一个对象进行使用,不需要使用一个对象去接收new出来的对象。

package day06;

public class NoNameDemo {

	public static void main(String[] args) {
		new Demo2().method();;
		Demo2 d3 = new Demo2();
		d3.show(new Demo2());
	}
	

}
class Demo2{
	public void method(){
		System.out.println("匿名对象调用");
	}
	public void show(Demo2 d){
		d.method();
		System.out.println("传过来一个匿名对象");
	}
}
匿名对象的使用场景:当方法仅仅只需要调用一次的时候,还可以作为参数进行传递。

3、封装

封装是面向对象的三大特性之一,什么是封装呢?

封装就是将一些不需要对外提供的细节隐藏起来,并且对外提供一个公共的访问方式。

封装的体现之一就是private,private是一个修饰符,用于修饰变量、方法。

被private修饰的方法和变量只能在本类中被访问。

package day061;

public class PrivateDemo {

	public static void main(String[] args) {

//		new Demo().show();报错
		new Demo().method();
	}

}
class Demo{
	private String str;
	private void show(){
		str = "hello world";
		System.out.println(str);
	}
	public void method(){
		show();
	}
}


4、this关键字

this关键字是对当前对象的引用,this关键字代表的是一个对象,this.变量名或者this.方法名,该变量或者该方法属于哪个类,this就代表该类对象。

假设我有一个方法,方法中有一个成员变量和一个方法,方法上有一个形参,形参的名称与成员变量名相同,如果在方法中是用变量的话,使用的会是哪一个呢?

package day061;

public class PrivateDemo2 {

	public static void main(String[] args) {
		new Demo01().show("张三");
	}

}
class Demo01{
	String name;
	public void show(String name){
		System.out.println("name:"+name);
	}
}

发现打印结果是张三,其实在java当中,如果成员变量和局部变量同名的话,首先会在方法中寻找是否有该变量,如果有,使用的就是局部变量,没有就使用成员变量,那么如果我们需要使用成员变量又该如何呢?需要使用成员变量的话就用this.成员变量名使用的就是成员变量了。

5、构造方法

构造方法是指与类名相同的方法,并且该方法没有返回值类型,默认的构造方法是无参构造方法,如果手动给定了一个带参的构造方法,那么系统就不再默认生成构造方法了。

构造方法的作用其实是对对象进行初始化操作

package day062;

public class Demo {

	public static void main(String[] args) {
		Student s = new Student();
		System.out.println(s.name+":"+s.age);
		Student s2 = new Student("张三",25);
		System.out.println(s2.name+":"+s2.age);
	}

}
class Student{
	int age;
	String name;
	public Student(){  //无参构造方法
		age = 18;
		name = "小李";
	}
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
}

6、static关键字

static是静态的意思,用于修饰方法和变量。被static修饰的方法或者变量被所有对象所共享。

static特点:

随着类的加载而加载

优先于对象存在

被类的所有对象共享

在静态方法中只能访问静态成员,不能访问非静态成员

静态变量和成员变量的区别:
A:所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C:生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics