类的特征之封装

1. 封装:只对外界提供有用的属性和行为 外界不用关心类具体的实现过程

构造方法:只能用来创建对象,系统会自动在这个类中加入一个默认的构造方法;也可以自己定义,一旦自己写了之后系统默认的构造方法就不存在了;构造方法必须存在;构造方法可以有多个,(为什么)因为方法的重载(可以同名,参数列表不同) 只能在创建对象时使用,可以给属性赋值

特点:构造方法名和类名相同,没有返回值类型,可以有参数,系统自动加入的构造方法是空参的,也无执行体 如 Person(){} (main()为什么没有返回值:因为JVM 调用此方法)

修改属性的值:不能使用构造方法,使用set()方法修改

定义构造方法时若局部变量与成员变量同名时,则使用局部变量,this(使用哪个对象就指向谁,类似于墙头草) 是一个引用,随着程序的执行,总是指向被使用的对象 (堆内存的地址)构造方法之间的调用通过 this 完成 ,且必须写在构造方法的第一行 如:

Person(String name,int age){  //局部变量与成员变量同名时,使用局部变量
	this.name=name;  //this 是一个引用,总是指向被使用的对象
	this.age=age;
}

2. static 静态变量:又叫类变量

       静态成员变量的特点:1)既可以通过对象访问也可以通过类名直接访问;2)存储所属类的所有对象共享的数据;3)随着类的加载在方法区的静态区开辟内存(创建对象之前);4)随着类的加载在方法区静态区开辟内存,程序退出时才释放内存 。 (缺点)占用内存时间长;静态的只能使用静态的

       非静态成员变量(实例变量)特点:1)只能使用对象来访问;2)存储每一个对象特有的数据;3)是在创建对象时在堆中开辟内存的;4)创建对象时在堆中开辟内存,当所属对象成为垃圾时等待垃圾回收线程回收。 非静态的方法通过对象调用

对比:访问方式不同 储存数据不同 存储位置不同 生命周期不同(从在内存中出现到消失)

静态区只保存一个 static所修饰的成员变量,当它的值被修改时,后面均共享被修改后的值

       使用场景:1)在什么情况下成员变量可以被修饰为 static :当成员变量的值被所属类的所有对象共享时。 2)什么情况下成员方法可以被修饰为 static :当该方法没有用到所属类中的非静态成员时 ,静态方法是无法从静态上下文中引用非静态方法的。

 

为什么静态方法不能使用非静态成员:静态的出现时非静态的还没出现,但非静态的可以使用静态的

      静态的应用:封装工具类(一般工具类的方法是静态的)

Arrays.copyOf() 拷贝 Arrays.binarySearch(arr,34) 二分法查找 Arrays.sort(arr) 排序

直接通过类 Arrays 调用说明上面的三个方法是静态的

把一个常用的功能封装在一个类中

说明书:即文档注释使用 /** */注释 加载字节码文件时生成说明书( 生成工具类的api)那必须是public的

javadoc -d(指定路径) doc (文件夹) ArrayTool.java

       静态代码块:随着类(字节码)的加载而执行,且只执行一次,优先于 main() 方法的执行,程序中的初始化功能通常写在静态代码块中 静态的优先开辟内存 ,最早出现 如:

class Test
{
	static int num=10;
	static{
	   System.out.println("C");
	}
	public static void show(){
	    System.out.println(num);
	}
}
class Demo10 
{
	static{  //第一步执行
	   System.out.println("A");
	}
	public static void main(String[] args) {  //第三步才执行
		//Test t=new Test();
		//Test.show();//加载Test.class
		Test t=null;
	}
	static{  //第二步执行
	   System.out.println("B");
	}
}   // 打印结果为  A B C

        构造代码块:对象一创建就执行,优先于构造方法执行,所有对象共性的功能可以写在构造代码块中    如:

class Person
{
	String name;

	{
	   System.out.println("呵呵");
	}

	Person(String name)
	{
	   this.name=name;
	   System.out.println(name);
	}
}
class Demo11 
{
	public static void main(String[] args) 
	{
		new Person("李四");

		new Person("张三");
	}
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值