java基础学习笔记6

来源:互联网 发布:快说话配音软件 编辑:程序博客网 时间:2024/05/09 04:13
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;}}





0 0
原创粉丝点击