zoukankan      html  css  js  c++  java
  • 面向对象

    方法

     成员变量和局部变量的区别

    	1、在类中的位置不同
    		成员变量:类中方法外
    		局部变量:方法定义中或者方法声明上
    	2、在内存中的位置不同
    		成员变量:在堆中
    		局部变量:在栈中
    	3、生命周期不同
    		成员变量:随着对象的创建而存在,随着对象的消失而消失
    		局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    	4、初始化值不同
    		成员变量:有默认值
    		局部变量:没有默认值,必须定义,赋值,然后才能使用
    	注意事项:
    		局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
    

    案例:

    class Varialbe {
        //成员变量
        int num; //默认值0
        
        public void show() {
            //可能尚未初始化变量num2
            int num2; //没有默认值
            num2 = 20; //定义后必须赋值才能使用
            
            //方法中可以使用成员变量和局部变量
            System.out.println(num2);    
            System.out.println(num);
        }
    }
    
    class VariableDemo {
        public static void main(String[] args) {
            Varialbe v = new Varialbe();
            
            System.out.println(v.num); //访问成员变量,不能访问局部变量num2
            
            v.show();    
                
        }
    }

    类与对象

     对象内存存储过程

     类作为形式参数(理解)

      如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象

     匿名对象(理解)

    	1、没有名字的对象
    	2、应用场景
    		a、调用方法,仅仅只调用一次的时候。
    		b、匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。
    		c、可以作为实际参数传递。
    	3、例子:new Student().show();
    

     类的封装

    	1、为了给类中的属性xxx进行赋值校验,从而产生setXxx();。(一般在这里校验)
    	2、由于依然可以使用 类的对象.xxx 进行赋值,从而产生 private 类型 xxx;。(private一般赋值给成员变量)
    

    this关键字

      • 代表当前类的引用对象

        记住:哪个对象调用方法,该方法内部的this就代表那个对象

      • this的应用场景

        解决了局部变量隐藏成员变量的问题

      • this关键字内存图解

    static关键字

      • 静态的特点

        A:随着类的加载而加载

        B:被类的所有对象共享

        C:静态成员变量可以通过类名调用
          既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。

      • 静态的内存图

             静态的内容在方法区的静态区

      • 静态的注意事项

    A:在静态方法中没有this对象

    B:静态只能访问静态

     

      • main方法是静态的

    public:权限最大

    static:不用创建对象调用

    void:返回值给jvm没有意义

    main:就是一个常见的名称

    String[] args:可以接收数据,提供程序的灵活性
    格式:java MainDemo hello world java
    java MainDemo 10 20 30

    代码块(理解)

    1、用{}括起来的代码。
    2、分类:
    	1):局部代码块
    		main函数后,用于限定变量的生命周期,及早释放,提高内存利用率。
    	2):构造代码块
    		把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。
    	3):静态代码块
    		对类的数据进行初始化,仅仅只执行一次。
    3、静态代码块,构造代码块,构造方法的顺序
    	静态代码块 > 构造代码块 > 构造方法
    

    继承(掌握)

    	1、把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,
    	   这多个类就具备了这些内容。这个关系叫继承。
    	2、Java中如何表示继承呢?格式是什么呢?
    		A:用关键字extends表示
    		B:格式:
    			class 子类名 extends 父类名 {}
    	3、继承的好处:
    		A:提高了代码的复用性
    		B:提高了代码的维护性
    		C:让类与类产生了一个关系,是多态的前提
    	4、继承的弊端:
    		A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。
    			原则:低耦合,高内聚。
    			耦合:类与类的关系
    			内聚:自己完成某件事情的能力
    		B:打破了封装性
    	5、Java中继承的特点
    		A:Java中类只支持单继承
    		B:Java中可以多层(重)继承(继承体系)
    	6、继承的注意事项:
    		A:子类不能继承父类的私有成员
    		B:子类不能继承父类的构造方法,但是可以通过super去访问
    		C:不要为了部分功能而去继承
    	7、什么时候使用继承呢?
    		A:继承体现的是:is a的关系。
    		B:采用假设法
    	8、Java继承中的成员关系
    		A:成员变量
    			a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单
    			b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
    				子类的方法访问变量的查找顺序:
    					在子类方法的局部范围找,有就使用。
    					在子类的成员范围找,有就使用。
    					在父类的成员范围找,有就使用。
    					找不到,就报错。
    		B:构造方法
    			a:子类的构造方法默认会去访问父类的无参构造方法
    				是为了子类访问父类数据的初始化
    			b:父类中如果没有无参构造方法,怎么办?
    				子类通过super去明确调用带参构造
    				子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
    				让父类提供无参构造
    		C:成员方法
    			a:子类的成员方法和父类中的成员方法名称不一样,这个太简单
    			b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
    				通过子类对象访问一个方法的查找顺序:
    					在子类中找,有就使用
    					在父类中找,有就使用
    					找不到,就报错
    
    	9、数据初始化
    		A:一个类的初始化过程
    			成员变量的初始化
    			默认初始化
    			显示初始化
    			构造方法初始化
    		B:子父类的构造执行过程(分层初始化)
    			先进行父类初始化,然后进行子类初始化。
    		D:例子:
    			/*
    				看程序写结果:
    						
    				结果:
    					YXYZ
    					
    				问题:
    					虽然子类中构造方法默认有一个super()
    					初始化的时候,不是按照那个顺序进行的。
    					而是按照分层初始化进行的。
    					它仅仅表示要先初始化父类数据,再初始化子类数据。
    			*/
    			class X {
    				Y b = new Y();
    				X() {
    					System.out.print("X");
    				}
    			}
    
    			class Y {
    				Y() {
    					System.out.print("Y");
    				}
    			}
    
    			public class Z extends X {
    				Y y = new Y();
    				Z() {
    					//super
    					System.out.print("Z");
    				}
    				public static void main(String[] args) {
    					new Z(); 
    				}
    			}
    	10、方法重写和方法重载的区别?方法重载能改变返回值类型吗?
    
    			方法重写:
    				在子类中,出现和父类中一模一样的方法声明的现象。
    			
    			方法重载:
    				同一个类中,出现的方法名相同,参数列表不同的现象。
    
    
    			方法重载能改变返回值类型,因为它和返回值类型无关。
    
    
    			Override:方法重写
    			Overload:方法重载
    
    	11、this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。
    
    			this:代表当前类的对象引用
    			super:代表父类存储空间的标识。(可以理解为父类的引用,通过这个东西可以访问父类的成员)
    	
    				场景:
    					成员变量:
    						this.成员变量
    						super.成员变量
    					构造方法:
    						this(...)
    						super(...)
    					成员方法:
    						this.成员方法
    						super.成员方法
    
  • 相关阅读:
    .htaccess
    windows快速搭建wamp环境,多站点域名访问
    require与include的区别
    PHP常用操作的字符串函数
    高效做事的习惯
    成功?!
    面向对象程序设计
    失落 绝望
    jquery学习收获
    XML操作类
  • 原文地址:https://www.cnblogs.com/zhanwang/p/7225653.html
Copyright © 2011-2022 走看看