1、面向对象的三大特征是?
答:封装、继承、多态。
2、类与对象的关系?
答:类是对象的模版,对象是类的实例,类只能通过对象才可以使用。
3、类的结构?怎样取得类的结构?
答:结构:属性、方法(构造方法);通过反射。
4、如果一个类没有被实例就直接使用,会出现什么异常?
答:空指向异常。
5、类属性于什么数据类型,进行引用传递时,传递的是什么东东?
答:属于引用类型,传递的是堆内存的使用权。
6、类被封装的属性,只能通过什么方法调用?有什么规矩?
答:只能通过setter和getter方法。
7、构造方法的特点、作用是什么?我的易错点?
答:只要是类则必定存在构造方法,它没有声明构造方法会在编译时自动生成无参、什么都不做的构造方法。
8、String类的两种实例化区别?怎样进行内容的比较?内容一旦声明则不可改变的原理?与BufferString类的比较?
答:通过直接赋值的方法(一个字符串就是一个String类的匿名对象,即已经开辟了堆内存的并可以直接使用的对象。)
通过new String()实例化
内容不可改变原理:一个String类对象内容的改变实际上是通过内存地址的“断开-连接”变化完成的,而本身字符串中的内容并没有任何变化。其实还是只是改变堆内存指向问题。
与BufferString类的比较在博客Runtime类调查报告中有讲过。
9、引用传递的概念实质及过程?
答:所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间。
10、this形象化,this关键字 和 super关键字的比较?
答:当你进入一个房子后,
11、Java中使用satic声明的属性和方法有什么特点?static的相关应用?理解main方法?(易混知识点)
答:static声明的属性称为全局属性(静态属性),被所有对象共享。调用:类名称.static 属性
static声明的方法(类方法)
static 声明的方法是不能调用被非static类型声明的属性或方法的。(程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名称调用)
作用:使用satic属性来统计一个类到底产生了多少个实例化对象。这我在《图形工厂》中用到很多。
12、代码块的分类和特点?
答:普通代码块、构造块、静态代码块、同步代码块。静态代码块优先于主方法执行,而在类定义的静态代码块会优先于构造代码块,而且不管产生多少个对象,静态代码只执行一次。
13、构造方法私有化的应用:单态设计模式。
答:构造方法的私有化,可以控制实例化对象的产生。而单态设计模式:是在入处(构造方法)限制了对象的实例化操作。
这里注意比较:对象复制的Object.clone()不是引用,是两个对象的不同位置。
14、对象数组的使用?
答:谨记:数组一定要先开辟空间,但因为其是引用数据类型,所以数组中的每一个对象默认值是null值,则在使用时数组中的每一对象必须分别进行实例化操作。其实 在主方法中的String []args就是对象数组。
15、内部类的定义2种方法和好处?(薄弱知识点)
答:1、用static定义内部类 2、在外部访问内部类
16、谈谈类设计和程序设计的思路?
自问自答:
1、子类对象实例化过程中构造方法的调用顺序?
答:就像生活中先有父母才再有孩子。
2、当父类有多个构造方法时,子类怎样调用特定的构造方法?
答:通过super()关键字来实现。
3、this与super的相似与区别?
答:
4、重载与覆写的区别?
答:
5、如果父类()的方法不希望被子类覆写,该怎么办?
答:用final关键字(完结器)声明这个方法。
6、怎样声明一个全局变量?final的绰号?
答:
使用final声明的类是太监类。
final声明的变量成为 常量,不可修改。
全局变量:public static final INFO = "ZhangZe";
7、什么叫一个完整好的类?
答:我们知道所有的类继承自Object类。一个好的类应该覆写Object类中的toString()、equals()、hashCode()3个方法。
所有引用数组类型都可以向Object类进行向上转型。
8、抽象类的作用和实际应用-模板设计?
答:抽象类是用来作父类的,作用像“模版”。不能由抽象类创建对象。
模板设计:
1 abstract class Person{ 2 private String name ; // 定义name属性 3 private int age ; // 定义age属性 4 public Person(String name,int age){ 5 this.name = name ; 6 this.age = age ; 7 } 8 public String getName(){ 9 return this.name ; 10 } 11 public int getAge(){ 12 return this.age ; 13 } 14 public void say(){ // 人说话是一个具体的功能 15 System.out.println(this.getContent()) ; // 输出内容 16 } 17 public abstract String getContent() ; // 说话的内容由子类决定 18 }; 19 class Student extends Person{ 20 private float score ; 21 public Student(String name,int age,float score){ 22 super(name,age) ; // 调用父类中的构造方法 23 this.score = score ; 24 } 25 public String getContent(){ 26 return "学生信息 --> 姓名:" + super.getName() + 27 ";年龄:" + super.getAge() + 28 ";成绩:" + this.score ; 29 } 30 }; 31 class Worker extends Person{ 32 private float salary ; 33 public Worker(String name,int age,float salary){ 34 super(name,age) ; // 调用父类中的构造方法 35 this.salary = salary ; 36 } 37 public String getContent(){ 38 return "工人信息 --> 姓名:" + super.getName() + 39 ";年龄:" + super.getAge() + 40 ";工资:" + this.salary ; 41 } 42 }; 43 public class AbstractCaseDemo02{ 44 public static void main(String args[]){ 45 Person per1 = null ; // 声明Person对象 46 Person per2 = null ; // 声明Person对象 47 per1 = new Student("张三",20,99.0f) ; // 学生是一个人 48 per2 = new Worker("李四",30,3000.0f) ; // 工人是一个人 49 per1.say() ; // 学生说学生的话 50 per2.say() ; // 工人说工人的话 51 } 52 };
1 interface A 2 { 3 public void printInfo(); // 4 } 5 6 class B implements A 7 { // 实现接口 8 public void printInfo() 9 { 10 System.out.println("Hello World!!!"); 11 } 12 }; 13 14 class X 15 { 16 public void fun1() 17 { 18 this.fun2(new B()); 19 } 20 21 public void fun2(A a) 22 { 23 a.printInfo(); 24 } 25 }; 26 27 public class NoInnerClassDemo01 28 { 29 public static void main(String args[]) 30 { 31 new X().fun1(); // 实例化X类的对象,并调用fun1()方法 32 } 33 }
1 interface A 2 { 3 public void printInfo(); // 4 } 5 6 class X 7 { 8 public void fun1() 9 { 10 this.fun2(new A() 11 { 12 public void printInfo() 13 { 14 System.out.println("Hello World!!!"); 15 } 16 }); 17 } 18 19 public void fun2(A a) 20 { 21 a.printInfo(); 22 } 23 }; 24 25 public class NoInnerClassDemo02 26 { 27 public static void main(String args[]) 28 { 29 new X().fun1(); // 实例化X类的对象,并调用fun1()方法 30 } 31 };
1 new A(){ 2 public void printInfo(){ 3 System.out.println("Hello World!!!") ; 4 } 5 }