`
webdev2014
  • 浏览: 679187 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_毕向东_Java基础视频教程学习笔记(十六)

 
阅读更多

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

封装:Encapsulation

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

好处:

将变化隔离

便于使用

提高重用性

提高安全性

封装原则:

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

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

函数就是java代码中最小的封装体。

构造函数:

特点:

函数名于类名相同

不用定义返回值类型

不可以写return语句

作用:

给对象进行初始化。

注意:

1、默认构造函数的特点。

2、多个构造函数是以重载形式存在的。


package day03;

/*
 * 静态关键字:static
 * 用法:是一个修饰符,用于修饰成员(成员变量和成员方法)
 * 当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类调用
 * 调用方法: 类名.静态成员
 * 
 * static 特点:
 * 1.随着类的加载而加载,随着类的消失而消失
 * 		也就是说静态会随着类的消失而消失,说明他的生命周期最长。
 * 2,优先于对象存在
 * 		明确一点:静态时先存在的,对象是后存在的
 * 3.被所有的对象所共享
 * 4,可以直接被类名所调用
 * 
 * 实例变量和类变量的区别:
 * 		1.存放位置:类变量随着类的加载而存在于方法区中。
 * 					实例变量随着对象的建立而存在于堆内存中。
 * 		2.生命周期:类变量:生命周期最长,随着类的消失而消失
 * 					实例变量生命周期随着对象的消失而消失。
 * 
 * 静态的使用注意事项:
 * 	1、静态方法只能访问静态成员
 * 			非静态方法既可以访问静态,也可以访问非静态
 * 	2、静态方法中不可以定义this、super关键字。
 * 		因为静态优先于对象存在。所以静态方法中不可以出现this。
 * 	3、主函数是静态的。
 * 
 * 静态有利有弊:
 * 		利处:对对象的共享数据进行单独空间存储,节省空间。没有必要每一个对象中都存储一份。
 * 			可以直接被类名调用。
 * 		弊端:生命周期过长。
 * 			    访问出现局限性。(静态虽好,只能访问静态)
 */
class Person{
	static String country="CN";		//静态的成员变量,也叫类成员变量
	String name;	//成员变量,也叫实例变量
	int age;
	public static void show(){
		System.out.println("country="+country);
	}
}
public class StaticDemo {
	public static void main(String [] args){
//		Person p=new Person();
//		p.show();
		System.out.println("静态调用 "+Person.country); //静态调用  类名.静态成员
		Person.show();	//调用静态方法
	}
}


package day03;
/*
 * 什么时候使用静态?
 * 要从两方面下手:
 * 因为静态修饰的内容有成员变量和函数
 * 什么时候定义静态变量(类变量)呢?
 * 	当对象中出现共享数据时,该数据被静态所修饰,
 * 	对象中的特有数据要定义成非静态,存在于堆内存中。
 * 
 * 什么时候定义静态函数呢?(重点)
 * 	当功能内部没有访问到非静态数据(对象的特有数据),
 * 那么该功能科以定义成静态的
 * 
 * 
 */

class Person3{
	String name;
	public static void show(){
		System.out.println("hah");
	}
}
public class StaticDemo01 {
	public static void main(String [] args){
		Person3.show();
	}
}


package day03;
/*
 * public static void main(String [] args){}
 * 
 * 主函数:是一个特殊的函数。作为程序的入口,可以被JVM调用。
 * 
 * 主函数的定义:
 * public:代表着该函数访问权限是最大的。
 * static:代表主函数随着类的加载已经存在了
 * void :主函数没有具体的返回值
 * main:不是关键字,但是是一个特殊的单词,可以被JVM识别
 * (String [] args):函数的参数,参数的类型是一个数组,该数组中的元素师祖父串。字符串类型的数组
 * 主函数是固定格式的:JVM识别。
 * 
 * JVM在调用主函数时,传入的是new String[0];
 * 
 */
public class MainDemo {
	public static void main(String [] args){
		String arr []={"hah","heh","heih","huh"};
		MainTest.main(arr);
	}	
}

class MainTest{
	public static void main(String [] args){	//唯一可以改变的是args(arguments)  args的值只有两个 一个是数组,另一个是null
		System.out.println("数组的长度:"+args.length);
		for(int x=0;x<args.length;x++){
			System.out.println(args[x]);//new String[];
		}
						
	}
}



package day03;
/*
 * 静态的应用:
 * 每个应用程序中都有共性的功能,
 * 可已将这些功能进行抽取,独立封装
 * 以便复用
 * 
 * 
 * 虽然可以通过建立ArrayTool的对象使用这些工具的方法,对数组进行操作
 * 发现了问题:
 * 1.对象时用于封装数据的,可是ArrayTool对象并未封装特有数据
 * 2.操作数组的每一个方法都没有用到ArrayTool对象中特有的数据
 * 
 * 这时考虑,让程序更严谨,是不需要对象的。
 * 可以将ArrayTool中的方法都定义成static的,直接通过类名调用即可。
 * 
 * 
 * 将方法都静态后,可以方便与使用,但是该类还是可以被其他程序建立对象的
 * 
 * 为了更为严谨,强制该类不能建立对象
 * 可以通过将构造函数私有化
 */
public class ArrayToolDemo {
	public static void main(String [] args){
		int [] arr={1,3,5,4,9,2,56,7,99};
		//创建对象,然后调用,在这个程序里面没有必要创建对象
//		ArrayTool tool=new ArrayTool();
//		System.out.println("max="+tool.getMax(arr));
//		System.out.println("min="+tool.getMin(arr));
//		tool.selectSort(arr);
		//类直接调用定义好的工具,显得比较方便
		System.out.println(ArrayTool.getMax(arr));
		ArrayTool.printArray(arr);
//		ArrayTool.selectSort(arr);
//		ArrayTool.printArray(arr);
		ArrayTool.bubbleSort(arr);
		ArrayTool.printArray(arr);
	}

}

class ArrayTool{
	private ArrayTool(){
		//将构造函数私有化,目的就是不让其他类创建对象
	}
	//获取数组最大值
	public static int getMax(int [] arr){
		int max=0;
		for(int x=0;x<arr.length;x++){
			if(arr[x]>arr[max])
				max=x;
		}
		return arr[max];
	}
	//获取数组的最小值
	public static int getMin(int [] arr){
		int min=0;
		for(int x=0;x<arr.length;x++){
			if(arr[x]<arr[min])
				min=x;
		}
		return arr[min];
	}
	//数组的排序
	public static void selectSort(int [] arr){
		for(int x=0;x<arr.length-1;x++){
			for(int y=x+1;y<arr.length;y++){
				if(arr[x]>arr[y]){
					swap(arr,x,y);
				}
			}
		}
	}
	
	public static void bubbleSort(int [] arr){
		for(int x=0;x<arr.length-1;x++){
			for(int y=0;y<arr.length-x-1;y++){
				if(arr[y]>arr[y+1]){
					swap(arr,y,y+1);
				}
			}
		}
	}
	//数组排序中换位置的方法
	private static void swap(int [] arr,int a,int b){
		
			int temp=0;
			temp=arr[a];
			arr[a]=arr[b];
			arr[b]=temp;
		
	}
	//打印数组的方法
	public static void printArray(int [] arr){
		System.out.print("[");
		for(int x=0;x<arr.length;x++){
			if(x!=arr.length-1){
				System.out.print(arr[x]+",");
			}
			else
				System.out.print(arr[x]);
		}
		System.out.println("]");
	}
}

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics