Web培训
400-996-5531
1.成员变量与局部变量的区别: ①定义的位置不同:
成员变量定义在类中;
局部变量定义在方法中;
②在内存中的位置不同:
成员变量在堆中
局部变量在栈中
③生命周期不同:
成员变量随着对象的出现而出现,随着对象的消失而消失
局部变量随着方法的调用而出现,随着方法的弹栈而消失
④初始化不同:
成员变量随着对象的出现而分配空间,有默认值
局部变量随着被使用而分配空间,若只声明不开辟内存空间,没有默认值
2.传说中的匿名对象假设有个Car类,有num,color 2个成员变量,和一个run()方法可以打印num的值,这里有2中写法:
①:Car car = new Car();
car.color="red";
car.num="5";
car.run();
②new Car().color="red";
第二种写法就是匿名对象
局限性:第②句执行完后该对象就变成了垃圾,因为并没有引用指向该对象,垃圾回收器将回收该对象所占内存。
使用匿名对象的场景:当对对象的方法进行调用,并且只需要调用一次时,可以使用之
3.继承的实质:继承的实质是拷贝一份父类所有的成员变量和方法到自己里面,其中包括父类的私有成员变量和方法。然后便与原本的父类没有了任何关系,子类的super()方法,构造的实际也只是拷贝到自己内部的父类的代码构造出的对象。如图:
当在main函数中执行:
Student s= new Student();
s.printNum();
Person p =new Person();
p.printNum();
会发现p.printNum()的结果仍然是10;子类中的super.num=20并不能改变原本父类的num属性,改变的只是拷贝到自己内部的父类代码构造出来的对象的num属性.
而且,若父类Person有一个私有的成员变量,子类继承时也会一起拷贝过去,只是受访问权限控制,子类不能直接访问,但若父类提供一个公有的get方法,就可以通过该方法获取该私有属性,同样获得的也是拷贝的代码构造的对象所拥有的该属性。总之,无论如何,子类与它的继承的那个父类已经没有了联系,它不能改变原本那个父类的状态,它对父类的操作实际上都只是在操作它拷贝的那个副本而已。
当子类与父类有重名的成员或者方法时,并且访问权限不是private时,子类继承时会隐藏它们,若想调用之,可以用super关键字
4.构造代码块和局部代码块构造代码块:存放各个构造函数中的相同函数,每次构造对象,构造代码块中的代码都会被执行,在类中用{}包括的代码就是构造代码块
局部代码块:可以控制局部变量的生命周期,用于优化内存空间,在main中用{}包括的代码就是构造代码块
5.基本数据类型转换为包装类及与String之间的转化JAVA中有8中基本数据类型,因为是基本数据类型,不是引用类型,所以不能像String类型一样调用很多JAVA提供的方法,但若想使用,可以使用包装类包装这8中基本数据类型,然后可以使用各自对应的方法。 见jdk api java.lang包下
我们知道,要将int类型转化为String类型,可以使用如:String str = 10+"";这样的方式。除此之外,我们可以使用String提供的许多重载的valueOf()方法,由于JAVA有自动装/拆箱功能,这个方法中可以传入基本数据类型或者其包装类,如:
String str1 = String.valueOf(10);//直接传基本数据类型
Integer num = 10;
String str2 = String.valueOf(num);//传入包装类
附图:
file:///C:/Users/Administrator/Desktop/MyPicture/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E8%BD%AC%E5%8C%96.PNG
6.抽象类继承抽象类的子类可以是抽象类,它可以不实现或者部分实现父类的抽象方法,继续将抽象方法声明为抽象方法传递下去,但是该子类也必须声明为抽象类了,也不可以创建对象,所以说有abstract的类必定是抽象类是正确的
7.类间关系类之间有4种关系:继承(泛化),关联,聚合,组合。
继承: 是指子类继承父类,以扩展自身功能,实现代码重用
关联: 是一种较弱的类间关系,是一种模型元素之间的语义联系,比如一个类作为另一个类方法的参数。
聚合: 是指一种整体与部分的关系,先分析出整体类,再去找组成类,它们的关系如一台计算机和鼠标,拿掉计算机,鼠标依然存在,还可以插在其他电脑计算机上
组合: 也是指一种整体与部分的关系,但这是一种皮之不存,毛将焉附的关系,比如人和心脏。
8.继承的缺点和多用聚合,少用继承原则继承有两种目的,一种是衍生类继承基类的接口并重新实现(override),这样可以用操作基类的代码操作衍生类,也就是常说的IS-A的概念。另一种是衍生类的实现要用到基类的实现,继承是为了利用基类的代码而不是为了体现IS-A,这时用继承不如用组合更好。
继承的缺点:第一、子类对父类的继承是全部的公有和受保护的继承,这使得子类可能继承了对子类无用甚至有害的父类的方法。比如equals()方法换句话说,子类只希望继承父类的一部分方法,怎么办?第二、实际的对象千变万化,如果每一类的对象都有他们自己的类,尽管这些类都继承了他们的父类,但有些时候还是会造成类的无限膨胀。
第三、 继承的子类,实际上需要编译期确定下来,这满足不了需要在运行内才能确定对象的情况。而组合却可以比继承灵活得多,可以在运行期才决定某个对象。
9.static静态的优势在于可以直接由类名引用,弊端在于访问有局限性
静态方法中不能出现super,this等
原理:
1.静态是随着类的加载就加载,随着类的消失而消失。
2.静态优先于对象存在,被对象共享,即静态可以被类调用,也可以被对象调用
3.因为静态优先存在于内存中,无法访问后来对象中的数据,所以静态无法访问非静态,内部无法书写this,因为此时对象可能不存在
4.静态代码块:
用static{}包括的代码就是静态代码块,执行顺序是在静态变量显式初始化之后,作用是加载资源,初始化类
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved