2021-05-18

局部变量和成员变量的区别?
    
    1)代码的书写位置不同
        局部变量:在方法定义中或者是方法声明上的变量
        成员变量:类中方法外
    2)内存中的位置不同
        局部变量:在栈内存中
        成员变量:在堆内存中
        
    3)生命周期不同
        局部变量:随着方法调用而存在,随着方法的调用结束而消失!(使用完毕,立即消失了)
        成员变量:随着对象的创建而存在,随着对象的创建完毕,等待垃圾回收器自动回收而消失!
                            (对象创建完毕,对象可能被继续使用,所以不会立即消失!)
                            
    4)初始化不同:
        局部变量:定义的时候,使用前必须初始化; 要么就是直接初始化,不能没有初始化值!
        成员变量:随着类的加载而存在,存在系统默认初始化,可以不直接赋值! 也可以赋值
     

1.局部变量和成员变量的区别?
        1)书写位置
            局部变量:方法定义中或者方法声明上
            成员变量:在类中方法外
        2)内存位置不同
            局部变量:在栈内存
            成员变量:堆内存中
        3)生命周期不同
            局部变量:随着方法调用而存在,随着方法调用完毕而消失
            成员变量:随着对象的创建而存在,随着对象创建完毕,等待GC垃圾回收器回收而消失
            
        4)初始化不同
            局部变量:可以直接初始化;先定义,在使用之前必须初始化!
            成员变量:可以不初始化,由系统默认初始化(跟对象相关),构造方法初始化/显示初始化!
            

2.什么是this?this的作用是什么
        this:代表就是当前所在的类对象的地址值引用!
        this作用:就是为了区分局部变量隐藏成员变量
        
            this.成员变量;  访问的当期类的成员变量
            this.成员方法名() ; 访问的是当期类的成员方法
            this(xx)/this() :访问的本类的有参构造方法/访问的本类的无参构造方法

3.什么是封装?
        封装:就是将一个类的成员属性私有化(事物的属性隐藏),保证数据安全性,外界不能随意更改,对外提供公共访问
        setXXX(xx)getXXX() ;
        
        关键字:private
            被private修饰的成员:成员变量/成员方法,只能在本类中访问,外界类不能直接访问,但是可以间接
            通过公共的成员方法来访问!
        

4.什么是构造方法?构造方法的作用?
    构造方法:
        1)方法名和类名相同
        2)没有具体返回值类型
        3)连void都没有
        
        作用:就是为了给当前类的成员变量进行数据初始化!

5.一个类的组成有哪些? 如何编写一个标准类?
    一个类的组成:
            成员变量
            构造方法
            成员方法

1.什么是代码块,代码块的分类以及优先级
    在Java中,使用{}包起来语句多可以叫做代码块
    局部代码块:在方法中定义(局部位置)
                限定局部变量的生命周期
    构造代码块
            在类的成员位置{}
            作用:可以的类的一些成员变量进行数据初始化(可以将构造方法中共有的内容存储在构造代码块中)
            特点:每次执行构造方法之前,如果存在构造代码块,优先执行构造代码块
            
    静态代码块
            在类的成员位置
            static{
            
            }
            
            它是随着类的加载而加载,类就加载一次,静态代码块仅仅执行一次~

            
        静态代码块 > 构造代码块 > 构造方法
2.将一个变量定义为成员变量的时机问题(什么时候定义成员变量)
    如果当前这些变量能够描述真实事物的属性;
                这个时候将变量定义为成员变量,否则都是局部变量!

3.什么是继承,继承的好处是什么
        将多个类的共性内容抽取到一个独立的类中,让这独立类和这些类产生一种关系 "继承"
        继承的格式
                class Fu{
                
                }
                
                class Zi extends Fu{}
        继承的好处:
            1)提高了代码的复用性
            2)提高了代码维护性
            3)类与类之间关系 ,是"多态"的前提条件
            
        开发原则:
                低耦合(程序之间的耦合),高内聚

4.private关键字的特点
        private可以成员变量,可以修饰成员方法
        这些变量/方法都只能在本类中访问;
        这私有修饰的都可以间接通过公共方法访问!

5.static关键字的特点
    1)被static修饰的随着类的加载而加载
    2)优先于对象存在
    3)不能this共存
    4)有共享,共用的含义
    5)修饰的变量/方法,访问方式:
            类名.变量名; 
            类名.方法名() ;

1.继承中成员变量访问问题(父类成员变量名称和子类成员变量名称一致)
        继承中:父类成员变量名称和子类成员变量名称一致
            遵循"就近原则"
            1)先在子类局部位置查找,如果存在,就使用
            2)如果不存在,在子类的成员位置查找,如果存在,就使用
            3)如果子类的成员位置不存在,在父类的成员位置中找,有就使用
            4)如果父类成员位置没有,就没有这个变量,报错!

2.子类继承父类,如何访问构造方法?如果父类没有无参构造方法,如何访问

        继承中,构造方法不能被继承的;子类的所有的构造方法都默认访问父类的无参构造方法 :super() ;
        
        如果父类没有给出无参构造方法,子类的构造方法都会报错
        解决方案:
            1)手动给出父类的无参构造方法
            2)间接通过访问父类的有参构造方法,让父类进行数据初始化; super(xx) ;
            3)只要子类中的构造方法的一个能够让父类初始化即可!
            
            可以先通过本类的无参构造方法,间接访问本类的有参构造方法:this(xx),
            在通过本类的有参构造方法 :访问父类的有参构造方法:super(xx)
            

3.继承的好处以及特点有什么
        继承的好处:
                1)提高了代码的复用性
                2)提高了代码的维护性
                3)类与类之间产生继承关系,是"多态"的前提条件
                
        继承的特点:
                1)在Java中,只支持单继承,不支持多继承
                2)虽然不支持多继承,可以多层继承!

4.final关键字的特点有哪些
    final:状态修饰符,可以修饰类:该类不能被继承
    
    可以修饰变量,此时这个变量是常量,只能被赋值一次,不能再次更改了!    
            成员位置:
                    public static final int xx = 值;  传统方式定义常量        普通格式(编译时期常量)
                    public  final Student s = new Student() ; //实例(创建对象)变量 (运行时期常量)
                    
    修饰方法,此方法不被重写!

5.this和super的区别
        this:代表当前类的对象地址值引用
        super:代表父类空间标识(父类对象的地址值引用)
        
    this.变量名; 访问的本类的成员变量
    super.变量名; 访问的是父类的成员变量
    
    this.方法名() ;访问本类的成员方法
    super.方法名() ; 访问的父类的成员方法
    
    this() ; 访问本类的无参构造方法
    super() ;访问父类的无参构造方法
    
    this(xxx) ;访问本类的有参构造方法
    super(xxx);访问的父类的有参构造方法
        

6.方法重写和方法重载的区别
                            public String eat() {
                                return "xx" ;
                            }
                            
                            public String eat(){
                                
                            }
        Override:继承关系中,子类出现了父类一模一样的方法声明,子类的方法将父类的方法覆盖掉了,
                                                                                        使用子类的功能!
        Overload:定义多个方法的时候,这个方法(功能)可以提高代码的扩展性,可以针对同一个功能,传递不同类型的参数
                方法名相同,参数列表不同,和返回值无关!
                            参数类型不同,
                            参数个数不同
                            参数类型顺序...

   

1.什么是多态,多态的成员访问特点
        多态:一个事物在不同时刻体现的不同形态(内存中的变化)
        
        
        前提条件
            1)存在继承关系
            2)存在方法重写
            3)父类引用指向子类对象  Fu fu = new Zi() ;
            
            
            多态的成员访问特点:
                成员变量: 编译看左,运行看左!
                成员方法:编译看左,运行看右,由于存在方法重写,子类的功能将父类的功能覆盖了!
                静态的方法:算不上方法重写,编译看左,运行看左:  static修饰的都是和类相关的
            

2.多态的好处有哪些以及弊端
        好处:
                1)提高了代码的复用性(由继承保证)
                2)提高了代码的扩展性(由多态保证)
                
                //有动物类Animal
                继承关系
                有猫类Cat
                有狗类Dog 
                
                //Java23设计模式 :创建型设计模式  结构型设计模式 行为型设计模式
                class  AnimalFactory{ //动物工厂 ---->   静态工厂模式
                        private AnimalFactory(){}
                        //创建很多个动物
                        public static Cat creatCat(){
                        Cat c = new Cat() ;
                        return c ;
                            //return new Cat() ;
                        }
                        
                        
                        public static Dog creatDog(){
                            return new Dog() ;
                        }
                        
                        //优化
                        public static Animal createAnimal(String  type){
                            if("dog".equals(type)){
                                return new Dog() ;
                            }else if("cat".equals(type)){
                                return new Cat() ;
                            }else{
                                System.out.println("对不起,此工厂不提供这个动物的创建") ;
                            }        
                        }    
                }
                
                
                //测试
            Animal a =     AnimalFactory.createAnimal("dog") ; //Animal a = new Dog() ; 多态的应用
                
                传统方式---> 不好优化 
                Cat c = new Cat() ;
                Dog d = new Dog() ;
                
                Animal a = new XXX() ;
                
            
3.什么是抽象类?抽象类的本质是什么
        抽象类:
                一个事物如果存在抽象功能,那么这个类一定是抽象类!
                抽象类:在真实事物中,它是一个泛指(概括性的事物,非具体事物)  abstract 修饰
         
                抽象类中不一定有抽象方法,也可以是非抽象方法!
                
                抽象类的本质:强制子类必须完成的事情(要将抽象类中的所有的抽象方法必须重写!)
        
4.封装,继承,多态是什么?
            封装:
                    将一个事物的属性私有化,保证其数据的安全性(隐藏),对外提供公共访问方法操作!
                    
                    开发中:
                        1)定义这个类--- 实体类    User类 ,Order订单类,Product商品类...
                        2)需要封装这个类:获取数据
                                类名 对象  = new 类名() ;
                                有参构造方法/setXXX(xx):赋值   :形式参数----->数据库中查询到
                                User user = new User() ;
                                user.setUserName("zhangsan") ;

            继承:
                    将多个事物的共有属性抽取出来,在一个独立类中定义,然后独立的类和这些产生一个关系: extends
                    
                    目前---->学习继承---Object :以及Java高级部分----->jdk提供类,核心接口----之间就会继承体现!
                    
                    
                    开发中:
                             1) 用户类                        ---- > 数据库: user表
                                    用户名称
                                    用户名密码
                             2) 订单类:                        -----> 数据库:order表
                                    订单编号:orderId
                                    订单小计金额:subtotal
                                    
                                    针对多表之间查询:
                                    查询订单信息的同时查询出 订单属于哪个用户的 
                                    
                                    订单类中并没有用户的信息
                                        单独定义一个类:OrderUser extends Order
                                                            用户名称
                                                            用户名密码
                                                            
            多态:
                 一个事物在不同时刻体现的不同形态(内存中的变化)
                 开发中:提高代码的扩展性
                        Fu f = new Zi() ; //Fu类:具体类----> 具体类多态
                        Fu f = new Zi() ; //Fu类:抽象类----> 抽象类多态(其次)
                        接口类型 对象名 = new  接口的子实现类() ; ---->接口多态 (使用居多)
                        
                        
                        后期:压根项目中就见不到new 关键字----全部都是通过底层(反射技术---(内省))创建该类对象:
                                
                                            
                                
                    
                    
5.static关键字的特点
            1)随着的加载而加载,加载一次,被静态修饰的先进内存
            2)优先于对象存在 :不能和this共存
            3)可以被多个对象共享,共用
            4)可以被类名直接访问
                类名.方法名();
                类名.变量名 ;

    

1.抽象类和接口的区别
    1)成员的区别
        成员变量:抽象类中可以是常量,也可以是变量
                接口:只能是常量:存在默认修饰符 public static final
        构造方法:抽象类:存在构造方法,无参/有参-----由于有继承关系,父类先初始化,子类在初始化
                 接口:没有构造方法
        成员方法:抽象类中,既可以是抽象方法,也可以是非抽象方法
                 接口:只能是抽象方法,存在默认的修饰符:public abstract
                 
    2)关系区别:
            类与类(类:具体类/ 抽象类):都是继承关系:extends,而且只支持单继承,不支持多继承,可以多层继承!
            类与接口的关系:(类:具体类/抽象类---具体的子类):实现关系: implements 
                    一个类继承另一个类的同时,可以实现多个接口
            接口与接口的关系:继承关系: extends 可以单继承,也可以多继承!(也可以多层继承)    
    
    3)设计理念的区别:
            抽象类:由于存在继承关系,继承关系体现的是一种"is a"的关系---->A类是B类的一种,或者B类是A类的一种
            接口: 描述某个事物本身不具备的额外功能---->扩展功能,体现的一种"like a"的关系,A类类似于B类
                    
                                猫狗案例+接口+多态
                                猫和狗:一部分具备跳高的功能---JumpCat/JumpDog

2.如果方法的形式参数是一个数组类型,实际参数应该传递什么?
        public void printArray(int[] arr){  //实际参数应该传递的是当前数组对象!
            ...
        }

3.什么是接口,接口的定义格式以及接口和类之间的关系,请代码列举
         描述某个事物本身不具备的额外功能---->扩展功能,体现的一种"like a"的关系
         
         interface 接口名{}
         
         class 接口的子实现类名 implements 接口名{}
         
         
         interface Love{
            public abstract void love() ;
         }
         
         class LoveImpl implements Love{
            public void love(){
                System.out.println("爱生活,爱Java,爱高圆圆...") ;
            }
         }


4.多态的成员特点以及多态的好处
            格式:Fu fu = new Zi() ;

        成员变量:编译看左,运行看左
        成员方法:编译看左,运行看右
        构造方法:分层初始化;new Zi()----->
                先执行父类的构造方法----父类初始化完毕,然后执行子类构造方法,完成子类的初始化操作
        
        多态的好处:
            1)提高代码复用性(继承来保证)
            2)提高代码的扩展性(多态完成)   接口多态/抽象类多态

5.this和super的区别
        this:代表的本类(当前类)对象的地址值引用
            this.变量; 本类的成员变量
            this.方法名(); 本类的成员方法
            this();本类的无参构造方法
            this(xx);本类的有参构造方法
        super:代表父类的空间标识(父类的对象地址值引用)
        
            super.变量; 父类的成员变量
            super.方法名(); 父类的成员方法
            super();父类的无参构造方法
            super(xx);父类的有参构造方法
        

6.abstract和哪些关键字冲突,为什么
    abstract关键字:可以修饰类,可以修饰方法(抽象方法)----使用居多
        private :本private修饰的只能在本类访问方法,外界类不能访问
        static: static随着类的加载而加载,而当前抽象方法需要被子类重写,通过对象名访问的,static又优先于对象存在
        final:  被final修饰的方法不能被重写,而抽象方法需要被子类重写,就冲突了
        
        public:公共的:可以使用的
        protected:受保护的:可以使用的
            
            同一个包下的
                    当前类中可以访问
            同一个包下的
                    子类
            不同包下的
                    子类
                    
        默认修饰符:可以默认使用    

1.默认修饰符,private,protected,public修饰符他们的范围

                同一个包下的本类中        在同一个包下的子类/无关类中        在不同包下的子类中        在不同的包无关类中

private                    Y                
                
                
默认修饰符                Y                    Y                

protected                Y                    Y                                Y

public                     Y                    Y                                Y                            Y
    

2.方法的形式参数是具体类型,抽象类,接口,实际参数如何传递
            方法的形式参数是具体类型:实际需要传递的该具体类 对象
                            抽象类:实际参数需要传递该抽象类的子类对象
                            接口:实际参数需要传递该接口的子实现类对象


  方法的返回值是具体类型,抽象类,接口,该方法需要如何返回
            方法返回值类型是引用类型:
                                具体类型:返回的是当前类的具体对象
                                抽象类:返回的是当前抽象类的子类对象
                                接口:返回的是接口的子实现类对象
                                
            Java: 面向接口编程的
                  把接口暴露出来  ---- 开发者去针对接口来完成自己的业务功能!

  
3.接口的成员特点
        成员变量:只能是常量:public static final
        成员方法:只能是抽象方法:public abstract 
        没有构造方法
        

4.带包如何进行编译和运行

            方式1:手动方式
            1)进入java文件所在目录,然后编译 javac java源文件--->类名.class
            2)需要手动方式创建文件夹: package com.qf; 
            3)把1)中产生的类名.class 放在qf文件夹下
            4)直接带包运行
                    java com.qf.类名;
                    
            方式2:自动方式
            1)针对带包的java文件直接编译
                javac -d . java源文件----> com
                                                qf
                                                        类名.class
            2)    直接带包运行
                    java com.qf.类名;    

                    
                    
                    针对不同包java文件---必须先导包:然后将被导入的类---->先进行编译
                    然后针对当前要执行类--使用自动方式进行编译和运行即可!


5.请阐述你对多态的理解? 应用方面如何使用
        多态:
                继承/重写/父类引用指向子类对象
                
                任何父类出现的地方,都可以使用子类型  Fu fu = new Zi() ;
                
                
                应用方面:
                        接口多态使用居多!(讲 集合:List接口---->子类实现类之一:ArrayList)
                                    使用集合作为 "数据库"
                                    模拟用户登录/注册操作
                
                
                
                
                    
            子类继承父类,在父类中是可以获取子类对象!(反射....)    
            
            class Fu{
                    
                //提供main方法
                // 类名.class属性----->直接获取子类的字节码文件对象:包名.Zi.class  (反射技术)
            }
            
            class Zi extends Fu{
                public void method(){
                
                }
            }
            
            
            class Outer5{

    private int num = 20 ;

    public void method(){
        //局部变量
        int num2 = 50 ;

        //局部内部类
        class Inner5{
            public void show(){
                System.out.println(num);
                System.out.println(num2);
            }
        }

        Inner5 inner5 = new Inner5() ;
        inner5.show();
    }
}

public class OuterDemo5 {
    public static void main(String[] args) {

        //访问Inner5中的show
        //创建外部类对象.调用method
        Outer5 outer5 = new Outer5() ;
        outer5.method();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值