1.Java中构造方法的功能和特点,构造方法和一般方法的区别?
构造方法的功能:用来构建对象和对类中的成员变量进行初始化;
特点:构造方法没有具体返回值,方法名必须和类名保持一致,在类中可以以重载形式存在;
区别:子类可通过继承拥有父类当中的成员方法,但是构造方法不可以继承
子类在调用成员方法是,不用考虑父类是否需要调用父类的成员方法,但是子类在调用构造方法是,内部优先调用父类的构造方法,如果父类当中没有无参构造方法时,需要显式调用父类的构造方法。
2.方法的重载和方法的重写的区别?
方法重载:同一类中,方法名一样,参数列表不一样的,对于返回值和修饰符不影响。
方法重写:一般在父子类中或者接口与实现类中,要求:方法名称一致,参数列表一致,返回值一致,修饰符必须大于等于父类或者父接口当中的权限范围。
3.this和super的作用
this:指代当前类的一个对象,当方法内部的局部变量和类中的成员变量重名是,需要通过this关键字来指代类中的成员变量,当值出现类中成员变量被隐藏问题,this可以调用类中的成员变量,可以调用类中的成员方法,也可以通过this(...)来调用本类当中的其他构造方法。
4.在Java中一个类被声明为final类型,表明了什么意思?
由于final含义最终的,不可改变的意思,所以由final修饰的类,类中的信息不可改变,表示该类没有子类,不匀速任何类继承一个被final修饰的类。String、Math等就是被final修饰的类。
5.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承类?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承类
6.谈谈你对abstract、static修饰符的理解;
abstract修饰符:意思是抽象的,可以修饰类和方法;
当修饰类时,该类属于抽象类,在抽象类中可以声明抽象方法,但是抽象类不能直接实例化对象,需要借助于它的子类,才可以调用类中的成员方法;
当修饰方法时,该方法为抽象方法,抽象方法没有方法体内容,一般是需要被覆盖重写的;
static修饰符:静态的,可以修饰类中成员变量和成员方法;
当static修饰成员变量时,该变量属于静态变量,类变量,类变量被该类所有的对象所共享;
当static修饰成员方法时,该方法是静态方法,在静态方法中不能调用非静态成员信息,不能使用this关键字
static还可以修饰代码块,此代码块为静态代码块,静态代码块优先于构造方法和main方法加载,并且在程序当中只会被加载一次。
7.谈谈你对多态的理解。
多态是面向对象的三大特征之一,多态描述的是当一个对象能够表现出多种形态时,那么该对象就具有多态性
多态的具体表现形式是父类引用指向子类对象地址,使用多态可以让程序具有良好的可扩展性和便利性。
多态出现的前提一般符合三个条件:继承或者实现关系、方法重写、父类引用指向子类对象
8.谈谈你对内部类与外部类的成员访问情况以及匿名内部类的见解。
内部类描述的是当一个事物内部包含另外一种事物时时,可以使用内部类结构设计。
内部类一般分为成员内部类和局部内部类
成员内部类,定义在类中方法外,充当类中成员信息
成员内部类访问外部类没有障碍,直接访问,但是外部类访问成员内部类信息时,需要首先创建内部类的对象,通过内部类对象调用。
在开发当中,大多使用匿名内部类,匿名内部类本质是一个带着具体实现父接口或者父类的匿名的子类对象。当方法的形式参数是接口或者抽象类时,可以使用匿名内部类来进行参数传递。
9.求两个数的最大公约数和最小公倍数
能够整除一个整数的整数称为其的约数(如5是10的约数);几个自然数公有的约数,为他们的公约数,其中最大一个,为这几个自然数的最大公约数。
能够被一个整数整除的整数称为其的倍数(如10是5的倍数);两个或多个整数的公倍数里最小的那一个为它们的最小公倍数。
最小公倍数可以用这两个数相乘除以最小公约数求得
1 int a = 12; 2 int b = 18; 3 int index =a < b ? a : b; 4 for(int i =index ; i >= 1 ; i--) { 5 if(a %i == 0 && b % i == 0) { 6 System.out.println("最大公约数:"+i); 7 System.out.println("最小公倍数:" + (a*b/i)); 8 break; 9 } 10 }
10.求1000以内的完美数:
如果一个数恰好等于它的真因子(即除了自身以外的约数)之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496
1 for (int i = 1; i <= 1000; i++) { 2 int sum =0; 3 for (int j = 1; j < i; j++) { 4 if(i% j ==0) { 5 sum += j; 6 } 7 } 8 if(sum == i) { 9 System.out.println(i + "是完美数"); 10 } 11 }