码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员--java基础学习笔记6

时间:2015-07-12 09:47:03      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:java基础编程   黑马程序员   java   

黑马程序员--java基础学习笔记6
    一、笔记内容概述:
        面向对象(概述&举例)、类与对象的之间的关系、类与对象体现&细节、对象的内存体现、成员变量和局部变量的区别、类类型参数、匿名对象、基本数据类型参数传递图解、引用数据类型参数传递图解、封装&代码示例、面向对象(封装&思想)、二维数组&定义方式&内存图解&另一种定义方式&应用场景。
    二、常用内容介绍:
        1.面向对象的特征:
        a.封装:将具体动作封装起来,方便调用,提高了代码的复用性和安全性。
        b.继承:继承某个类后,可以直接调用父类的方法,或者是覆写父类的方法,以提高类的功能拓展性。
       c.多态:一个类以多种形式存在。比如说等边直角三角形,既属于直角三角形,又属于等腰三角形,但是指的           都是同一个事物。
        2.类与对象的关系:
            java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。
            对象即是该类事物实实在在存在的个体。
        3.成员变量和局部变量的区别:
            成员变量:
            a.成员变量定义在类中,在整个类中都可以被访问。
            b.成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的
            堆内存当中。
            c.成员变量有默认初始化值。
            局部变量:
            a.局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
            b.局部变量存在于栈内存中,作用的范围结束,变量空间就会自动释放。
            c.局部变量没有默认初始化值。
        4.new关键字:
            只要是通过new操作符定义的实体就会在堆内存中开辟一个新的空间,
            并且每个对象都有一份属于自己的属性,所以后期出现单例设计模式
            模式,保证内存中只存在一个该实体对象,以提高性能,节省内存空间。
        5.先有类?还是先有对象?java中通过类new来创建一个对象,所以先有类,后有对象。
        6.double数据类型默认值是0.0,int数据类型的默认值是0,引用数据类型的默认值为null。
    三、经典示例及讲解:
    1.二维数组的定义:
package com.date6;
/**
 *理解这种二维数组的模式 
 */
public class Test1 {
	public static void main(String[] args) {
		int[][] arr = new int[][]{{1,2,3},{4,5,6}};
		for(int i=0;i<2;i++){
			for(int j=0;j<3;j++){
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
		}
	}
}
    输出效果:
    技术分享
    2.二维数组的一些属性:
package com.date6;

public class Test2 {
	public static void main(String[] args) {
		int[][] arr = new int[3][];
		System.out.println(arr);
		System.out.println(arr[0]);	//输出null,因为没有对它进行初始化
		System.out.println(arr[0][0]);
		//由于arr[0]数组为空,如果再查一位数组的元素,
		//肯定会报空指针NullPointerException异常
	}
}
    输出效果:
    技术分享

    3.理解封装的表现:
package com.date6;
/**
 *封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
 *
 *好处:
 *将变化隔离,便于使用,提高重用性,提高安全性。
 *
 *封装原则:
 *1.将不需要对外提供的内容都隐藏起来。
 *2.把属性都隐藏,提供公共方法对其访问。如,getXXX,setXXX。
 *
 *1.私有仅仅是封装的一种体现而已。
 *2.private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。
 *3.常用场景之一:将成员变量私有化,对外提供对应的set、get方法对其进行访问,提高对数据的安全性
 *  java中最小的封装体就是函数,类、框架也是封装体。
 */
class Person{
	//private:私有,是一个权限修饰符,用于修饰
	//不希望别人直接访问赋值,需要通过私有化把属性进行隐藏
	private int age;
	
	//提供set、get公共方法对其访问
	public void setAge(int a){
		//在set方法内可以对属性的赋值进行限制
		if(a>0 && a<130){
			age = a;
		}else{
			System.out.println("错误的数据");
		}
	}
	public int getAge(){
		return age;
	}
	void speak(){
		System.out.println("age="+age);
	}
}
public class Test8 {
	public static void main(String[] args) {
		Person p = new Person();
		//通过其他方式访问
		p.setAge(20);
		p.speak();
		//赋值不合法,set方法就不允许成功赋值
		p.setAge(-20);
	}
}
    4.匿名对象的使用:
package com.date6;
/**
 * 匿名对象两种使用情况:
 * 1.当对对象方法仅进行一次调用时。
 * 2.匿名对象可以作为实际参数进行传递。
 */
class Car{
	static String color = "red";
	static int num = 4;
	public static void run(){
		System.out.println("function run is running");
	}
	public static void show(){
		System.out.println(num+"..."+color);
	}
}
public class Test5 {
	public static void main(String[] args) {
		//对对象方法仅进行一次调用时,就可以使用匿名对象
		new Car().show();
		//匿名对象可以作为实际参数进行传递
		show(new Car());
	}
	public static void show(Car car) {
		car.color = "black";
		car.num = 3;
		System.out.println("function show is running!");
		System.out.println(car.num+"..."+car.color);
	}
}
    5.基本数据类型参数在函数中传递的特点:
package com.date6;
/**
 *基本数据类型参数传递 
 *1.jvm调用main方法,main方法入栈。
 *2.将x变量值设置为3。
 *3.main方法调用show方法,3作为基本数据类型参数赋值给show方法参数x,
 *也就是说,此时show方法的参数x值为3。
 *4.show方法执行x = 4后,show方法的参数x值变成4。
 *5.show方法执行结束,show方法出栈。show方法参数x也随之出栈。
 *6.main方法打印x的值。此时x指的是main方法中的x变量的值(show方法
 *中的参数x已经随show方法一块出栈了)。所以,打印出来的x值为3而不是4。
 *7.main方法执行结束,出栈。
 */
public class Test6 {
	public static void main(String[] args) {
		int x = 3;
		show(x);
		System.out.println("x="+x);
	}
	///下面两种方式打印的x值都是3
	//方式一
	public static int show(int x){
		x = 4;
		return x;
	}
	//方式二
	public static void show1(int x){
		x = 4;
	}
}
    6.引用数据类型参数在函数中传递的特点:
package com.date6;
//引用数据类型参数传递
/**
 *执行过程说明:
 * 1.jvm调用main方法,main方法入栈。
 * 2.创建一个Test7对象d(在堆内存中创建,d作为引用变量,指向堆内存中创建的实体对象),并
 * 将d指向的实体对象中的属性x的值设置为9.
 * 3.main方法调用show方法,d作为引用数据类型参数赋值给show方法参数t,也就是说,此时
 * show方法的参数t和main方法中的变量d同时指向了堆内存中的同一个实体对象。
 * 4.通过t.x调用堆内存当中的属性,并修改其值为4。
 * 5.show方法结束,t的生命周期结束,show方法出栈,但是实际上它已经将堆内存当中的属性值改变了,
 * 同时由于main方法的变量d依然引用着堆内存中的实体对象,因此堆内存中的实体对象不会被垃圾回收器清除。
 * 6.main方法打印d.x的值,此时d指向堆内存当中的那个被修改的对象的引用变量x,明显输出结果为4,而不是9。
 * 7.main方法结束,出栈,同时如果堆内存中的那个对象没有被调用,将会被jvm的垃圾回收器
 * 回收。
 * 
 * 总结:
 * 在java中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值就是你赋给变量的那个值。
 * 而对于引用数据类型,这个值是对象的引用,而不是这个对象本身。
 */
public class Test7 {
	int x = 3;
	public static void main(String[] args){
		Test7 d = new Test7();
		d.x = 9;
		show(d);
		System.out.println(d.x);
	}
	//下面两种方式打印x的结果都是4
	//方式一
	public static void show(Test7 t){
		t.x = 4;
	}
	//方式二
	public static int show1(Test7 t){
		t.x = 4;
		return t.x;
	}
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员--java基础学习笔记6

标签:java基础编程   黑马程序员   java   

原文地址:http://blog.csdn.net/u014344668/article/details/46844037

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!