Java基础复习笔记----day5

1,面向对象,类与对象。

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

在实际开发中,就是在找对象使用,没有对象就去创建一个对象。是一个找对象,建立对象,使用对象。维护对象的关系。

类和对象的关系:

映射到java中,描述就是class定义的类。
具体对象就是对应java在堆内存中用new建立实体。

类就是:对现实生活中事物的描述。
对象:就是这类事物,实实在在存在个体。

2.成员变量和局部变量。 

A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

注:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

 3.匿名对象和匿名类。

匿名对象

匿名对象也是Java中比较常见的实例化对象方式,匿名对象的使用情况:

  • 当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
  • 可以将匿名对象作为实际参数进行传递。

public class Convey {

    private Presenter presenter;

    public void setiPresenter() {
        IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
            }
        });
    }
}

public class Test {

    public static void main(String[] args) {
        //用匿名对象直接该类的方法
        new Convey().setiPresenter();
    }
}

匿名类

匿名类(也叫匿名内部类)他是内部类的一种。匿名类在类中只能使用一次,它通常用来简化代码的编写,但使用匿名类还有一个前提条件:它必须继承一个父类或者一个接口,因此这个匿名类会被默认为这个父类或者接口的子类或实现类。如:

//这是一个简单的接口
public interface IPresenter {
    void run();
}

//这是另外一个类
public class Presenter {
    //使用了接口的对象作为方法的参数,然后返回接口的对象
    public IPresenter getiPresenter(IPresenter iPresenter) {
        return iPresenter;
    }
}

//Convey类来操作上面的类和接口
public class Convey {
    //定义Presenter对象
    private Presenter presenter = new Presenter();


    public void setiPresenter() {
        //一个接口的局部变量
        IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
        //在这里定义一个接口的实现匿名类

            @Override
            public void run() {
                // 实现接口的方法
            }
        });
    }
}

4.private 

private :私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
私有只在本类中有效。

将age私有化以后,类以外即使建立了对象也不能直接访问。
但是人应该有年龄,就需要在Person类中提供对应访问age的方式。

注意:私有仅仅是封装的一种表现形式。

之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
对访问的数据进行操作。提高代码健壮性。

class Person
{
	private int age;
	public void setAge(int a)
	{
		if(a>0 && a<130)
		{
			age = a;
			speak();
		}
		else
			System.out.println("feifa age");
	}

	public int getAge()
	{
		return age;
	}
	private void speak()
	{
		System.out.println("age="+age);
	}
}

 5.构造函数和构造代码块。

构造函数:

对象一建立就会调用与之对应的构造函数。

构造函数的作用:可以用于给对象进行初始化。

构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。

当在类中自定义了构造函数后,默认的构造函数就没有了。


构造函数和一般函数在写法上有不同。

在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,给是对象添加对象具备的功能。

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

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

构造代码块:

构造代码块:在类中没与任何的前缀或后缀,并使用"{}"括起来的代码片段.
    作用:给对象进行初始化。
    对象一建立就运行,而且优先于构造函数执行。
    和构造函数的区别:
    构造代码块是给所有对象进行统一初始化,
    而构造函数是给对应的对象初始化。
    构造代码快中定义的是不同对象共性的初始化内容。


注:编译器是如何处理构造代码块的呢?很简单,编译器会把构造代码块插入到每个构造函数的最前端

如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)不插入构造代码块.

应用场景:

1.初始化实例变量:如果每个构造函数都需要初始化变量,即可通过构造代码块来实现.从而取代在每个构造函数调用初始化实例变量的方法.

2.初始化实例环境:一个对象必须在适当的场景下才能存在,如果没有适当的场景,则就需要在创建对象的时候创建此场景.

都用了构造代码块的两个特性:1.在每个构造函数中都运行 2.在构造函数中它会首先运行

 6.this

this:看上去,是用于区分局部变量和成员变量同名情况。
this:就代表本类的对象,
    this代表它所在函数所属对象的引用。
    简单说:哪个对象在调用this所在的函数,this就代表哪个对象】
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
        但凡本类功能内部使用了了本类对象,都用this表示。

 this语句

this语句 :用于构造函数之间进行互相调用。

this语句只能定义在构造函数的第一行。因为初始化要先执行。

class Person
{
	private String name;
	private int age;
	
	{
		
		System.out.println("code run");
	}
	
	Person()
	{
		//this("hah");
		System.out.println("person run");
	}
	Person(String name)
	{
		//this();
		this.name =name;
	}
	Person(String name,int age)
	{
		//this(name);
		//this.name = name;
		this.age = age;
		
	}

}

class  PersonDemo4
{
	public static void main(String[] args) 
	{
		new Person();
		//Person p = new Person("lisi",30);
		//Person p1 = new Person("lisi2",36);

	}
}

 完结

猜你喜欢

转载自blog.csdn.net/weixin_39506636/article/details/81667080