黑马程序员_面向对象(二)

来源:互联网 发布:网络不通怎么解决 编辑:程序博客网 时间:2024/04/27 16:24

 ------- android培训、java培训、期待与您交流! ----------

      在上一篇的博文中已经介绍了基本的面向对象的知识,今天这篇博文主要介绍的有以下几个内容

             1、成员变量和局部变量

             2、匿名对象

             3、封装

             4、this关键字

             5、构造方法

             6、static关键字

       1、成员变量和局部变量

              成员变量是定义在类中的变量,而局部变量是定义在方法上或某个代码块中,比如for中等等            

package day06;public class ClassDemo01 {public static void main(String[] args) {Demo d = new Demo();d.method();}}class Demo{int num; //成员变量public void method(){int num2 = 5; //局部变量System.out.println("num:"+num+",num2:"+num2);}}
运行结果

        通过运行结果我们发现,num没有初始化也有值,这个值为0,而局部变量如果没有被初始化就使用的话,编译就会报错。

        这边我们就需要说说成员变量和局部变量的区别:

              1、定义的位置不一样,成员变量定义在类中方法以外,而局部变量则定义在方法的声明上或者一些代码块中

              2、在内存中的位置不一样,成员变量定义在堆中,局部变量定义在栈中,定义在堆中的变量都会有一个初始化的值。

              3、生命周期不一样,成员变量的随着对象的创建而创建,随着对象的消失而消失,局部变量是随着方法的调用而存在,随着方法调用完毕而消失。

              4、初始化值不同,成员变量有默认初始化值,而局部变量没有,必须定义赋值后才能使用。

                     在开发中我们常常会将对象作为形参,那么这时候实际上需要的是一个对象,即是对对象的引用。


       2、匿名对象,匿名对象其实就是直接new出一个对象进行使用,不需要使用一个对象去接收new出来的对象。     

package day06;public class NoNameDemo {public static void main(String[] args) {new Demo2().method();;Demo2 d3 = new Demo2();d3.show(new Demo2());}}class Demo2{public void method(){System.out.println("匿名对象调用");}public void show(Demo2 d){d.method();System.out.println("传过来一个匿名对象");}}
      匿名对象的使用场景:当方法仅仅只需要调用一次的时候,还可以作为参数进行传递。 

      3、封装

             封装是面向对象的三大特性之一,什么是封装呢?

             封装就是将一些不需要对外提供的细节隐藏起来,并且对外提供一个公共的访问方式。

             封装的体现之一就是private,private是一个修饰符,用于修饰变量、方法。

             被private修饰的方法和变量只能在本类中被访问。

            

package day061;public class PrivateDemo {public static void main(String[] args) {//new Demo().show();报错new Demo().method();}}class Demo{private String str;private void show(){str = "hello world";System.out.println(str);}public void method(){show();}}

          4、this关键字

                this关键字是对当前对象的引用,this关键字代表的是一个对象,this.变量名或者this.方法名,该变量或者该方法属于哪个类,this就代表该类对象。

                假设我有一个方法,方法中有一个成员变量和一个方法,方法上有一个形参,形参的名称与成员变量名相同,如果在方法中是用变量的话,使用的会是哪一个呢?

               

package day061;public class PrivateDemo2 {public static void main(String[] args) {new Demo01().show("张三");}}class Demo01{String name;public void show(String name){System.out.println("name:"+name);}}
           

           发现打印结果是张三,其实在java当中,如果成员变量和局部变量同名的话,首先会在方法中寻找是否有该变量,如果有,使用的就是局部变量,没有就使用成员变量,那么如果我们需要使用成员变量又该如何呢?需要使用成员变量的话就用this.成员变量名使用的就是成员变量了。

           5、构造方法

           构造方法是指与类名相同的方法,并且该方法没有返回值类型,默认的构造方法是无参构造方法,如果手动给定了一个带参的构造方法,那么系统就不再默认生成构造方法了。

           构造方法的作用其实是对对象进行初始化操作

package day062;public class Demo {public static void main(String[] args) {Student s = new Student();System.out.println(s.name+":"+s.age);Student s2 = new Student("张三",25);System.out.println(s2.name+":"+s2.age);}}class Student{int age;String name;public Student(){  //无参构造方法age = 18;name = "小李";}public Student(String name,int age){this.name = name;this.age = age;}}

           6、static关键字

                 static是静态的意思,用于修饰方法和变量。被static修饰的方法或者变量被所有对象所共享。

                 static特点:

                          随着类的加载而加载

                         优先于对象存在

                         被类的所有对象共享

               在静态方法中只能访问静态成员,不能访问非静态成员

               静态变量和成员变量的区别:
                    A:所属不同
                         静态变量:属于类,类变量
                         成员变量:属于对象,对象变量,实例变量
                   B:内存位置不同
                        静态变量:方法区的静态区
                        成员变量:堆内存
                   C:生命周期不同
                        静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
                        成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
                   D:调用不同
                        静态变量:可以通过对象名调用,也可以通过类名调用
                        成员变量:只能通过对象名调用

                   

         

            



0 0