JAVA学习笔记(5-2-封装及构造函数)

本文详细介绍了面向对象编程中的封装概念及其应用,包括如何通过private关键字隐藏对象的属性和实现细节,以及如何通过构造函数对对象进行初始化。还讨论了不同类型的构造函数及其作用。

封装

    之隐藏对象的属性和实现细节,仅对外提供公共访问方式

        优点:将变化隔离

                   便于使用

                   提高重用性

                   提高安全性

        原则:将不需要对外提供的内容都隐藏起来

                   把属性都隐藏,提供公共方法对其访问

        ——private:私有,权限修饰符,用于修饰类中的成员(变量/函数)

                                只在本类中有效

//运行结果:Person.java:11: 错误: age可以在Person中访问private
//                p.age=20;
class Person{
	private int age;
	void speak(){
		System.out.println("age="+age);
	}
}

class PersonDemo{
	public static void main(String[] args){
		Person p=new Person();
		p.age=20;
		p.speak();
	}
}

接上例:将AGE私有化以后,类以外建立了对象也不能直接访问,需要在person类中提供对应的访问形式

class Person{
	private int age;
	void speak(){
		System.out.println("age="+age);
	}
	public void setAge(int x){//访问方式
		if(x>0){
            		age=x;
			speak();
        	}
        	else{
            		System.out.println("年龄必须>0");
        	}
	}
}

class PersonDemo{
	public static void main(String[] args){
		Person p=new Person();
		p.setAge(-20);
	}
}

**私有是封装的一种表现形式


构造函数

    特点:函数名与类名相同

               不用定义函数返回值类型

               不可以写return语句

    作用:给对象进行初始化

    注意:默认构造函数的特点

               多个构造函数以重载的形式存在

class Person1{
	Person1(){
		System.out.println("Person run");
	}
}

class Person1Demo{
	public static void main(String[] args){
		Person1 p=new Person1();
	}
}

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

当没有定义构造函数是,系统会默认给该类加入一个空参数的构造函数Person(){}

当在类中自定义构造函数后,默认的构造函数消失


class Person{
	private String name;
	private int age;
	Person(){
		System.out.println("A:name="+name+"__age="+age);
	}
	Person(String n){
		name=n;
		System.out.println("B:name="+name+"__age="+age);
	}
	Person(String n,int a){
		name=n;
		age=a;
		System.out.println("C:name="+name+"__age="+age);
	}
}

class Person1Demo{
	public static void main(String[] args){
		Person p=new Person();
		Person p1=new Person("wan");
		Person p2=new Person("tan",2);
	}
}

构造函数是在对象一建立就运行,给对象初始化;

一般方法是对象调用才执行,是给对象添加对象具备的功能

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


构造代码块

    给对象进行初始化

    对象一建立就运行,并且优先于构造函数执行

与构造函数区别

    构造代码块是对所有对象统一初始化

    构造函数是对相应对象初始化


class Person{
	private String name;
	private int age;
	{			//构造代码块
	System.out.println("Cry...........");
	}
	Person(){
		System.out.println("A:name="+name+"__age="+age);
	}
	Person(String n){
		name=n;
		System.out.println("B:name="+name+"__age="+age);
	}
	Person(String n,int a){
		name=n;
		age=a;
		System.out.println("C:name="+name+"__age="+age);
	}
}

class Person1Demo{
	public static void main(String[] args){
		Person p=new Person();
		Person p1=new Person("wan");
		Person p2=new Person("tan",2);
	}
}

 

转载于:https://my.oschina.net/Almon/blog/709232

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值