JAVA里面,“==”和“equals"的区别是什么呢?
1."=="操作符用于比较两个对象的引用是否相等。也就是说,它会检查两个对象是否指向内存中的同一个地址。如果两个对象的引用完全相同,则"=="返回true;否则返回false。
2."equals"是一个方法,它用于比较两个对象的内容是否相等。
JAVA三种基本控制结构:顺序,选择,循环
1.什么是类?
类就是将我们自然界中的事物的属性特点和行为特点抽象封装到类当中,反映这类事物的特点和功能。
2.类的成员组成?
包括域变量和成员方法
3.接口是否为类的成员?
接口不是类的成员,是一种特殊的类,不用class,而用interface。
什么是静态域变量(类变量)和实例域变量(对象变量),静态方法和实例方法?类的控制方式
1.对于域变量和成员方法都可以用static来修饰,static修饰的域变量称为类变量,static修饰的方法称为类方法,因为它们可以通过“类名.”来调用。没有被static修饰的域变量和成员方法称为实例变量(可以在程序中直接调用)和实例方法。 2.static是Java中的一个关键字,当它用在方法或变量前面时,表明这些方法或变量属于类本身,而不属于类的任何一个实例。去掉static,必须对象实例化才能调用【具体例子参照我的博客JAVA- n的阶乘Java版】 3.静态方法中不能使用this与super (因为静态变量的声明周期长,其在类加载时创建,在没有对象存在时静态变量就已经存在,故不能在静态方法中调用非静态变量或方法) 4.静态方法中(static)只能 直接 使用静态成员(静态属性和静态方法) 非静态成员可以访问静态的成员 上述解决方法: 在Java中,使用关键字static将方法或变量声明为静态。静态方法和变量属于类本身,而不是属于类的实例对象。当使用静态方法时,只能直接访问同样被声明为静态的成员变量。在你提供的代码中,height是一个非静态变量,无法从静态方法中直接访问。 法1:将height和width变量声明为静态变量: private static int height; private static int width; public static void drawrect() { // 方法内部的代码不变 } 法2: 将drawrect方法中的height和width参数传递给它: public static void drawrect(int height, int width) { // 方法内部的代码不变 } // 调用方法时传递参数 drawrect(height, width); 选择哪种方法取决于你的需求。如果height和width是整个类的共享属性,可以将它们声明为静态变量。如果它们在每次调用drawrect时都有可能不同,可以将它们作为参数传递给方法。
什么是对象?如何创建对象?什么是对象变量?如何对对象进行初始化?
对象是类的一个实例。new在创建对象的作用:(1)通过new在堆上开辟一个对象空间,将类当中的域变量跟成员方法复制到对象空间当中;(2)通过new来调用构造方法来初始化对象;(3)将对象空间的首地址赋值给对象变量。对象变量就是指对象的首地址,通过构造方法对对象进行初始化。
什么是构造方法?构造方法的特点与作用?
构造方法:(1)在一个类中方法名与类名相同的方法;(2)构造方法不是通过对象来调用,而是通过new运算符来调用;(3)构造方法是一种特殊的成员方法,它没有返回值也不能写void。
构造方法特点:可以被重载,当没有在类中定义构造方法时,系统会默认提供一个不带参数的构造方法。作用:初始化对象。
super和this关键字的用法?
this用在当前类,当前类的一个默认的对象,可以通过this来调用当前类的属性和成员方法,也可以直接调用当前类的构造方法的重载方法。super用于一个类的子类中,作为父类在子类中的一个默认的对象,通过它来调用父类的成员属性和成员方法,也可以在子类的构造方法里直接调用父类的构造方法。
final修饰类、变量和方法时各有什么特点?
修饰类:这个类不能够被继承。
修饰变量:这个变量值不能改变,成为一个常量。
修饰方法:这个方法不能被覆盖。
如果父类中的方法被声明为
final
,那么子类将无法重写该方法。如果父类中的方法被声明为static
,那么子类也无法通过继承来获取该方法。父类中说明为private的属性和方法,子类不可直接访问。
接口(抽象类进一步抽象出来的)
接口的方式来帮助类进行多继承 ,接口可以继承
接口:抽象的不能再抽象的类
- 只能有方法的声明,不能有方法的实现
- 只有抽象方法
- 接口变相规定类的行为:
class computer implements product//继承接口 { public int Getprice()//接口的抽象方法在类里面要实现 { return 1; } }
接口和类的区别:
(1)类只能单继承,而接口可以多继承。
(2)类中的方法可以是具体的,也可以抽象的。 接口中的方法都是抽象的。
(3)接口中的方法要用类来实现,一个类可以实现多个接口。注意:
1 接口可以继承:一个接口可以继承多个其它的接口[修饰符] interface 接口名[extends] [接口列表]
{
接口体
}public interface Cookable extends Foodable,Printable
2 接口中的方法要用类来实现 。
[类修饰符] class类名 [extends子句] [ implements 子句]
注意:在implements子句中可以包含多个接口类型,各个接口类型之间用逗号隔开
3 一个类可以实现多个接口 。
4 Java接口反映了对象较高层次的抽象,为描述相互似乎没有关系的对象的共性提供了一种有效的手段。[修饰符] interface 接口名[extends] [接口列表]
{
接口体
}public interface Cookable extends Foodable,Printable
[例4-19] TestInterface.java 接口的使用示例 interface Runner{ public void run();} interface Swimmer{ public void swim();} abstract class Animal {abstract public void eat();} class Person extends Animal implements Runner,Swimmer { //Person是能跑和游泳的动物,所以继承了Animal,同时实现了Runner和Swimmer两个接口 public void run() {System.out.println("run");} public void swim(){System.out.println("swim");} public void eat(){System.out.println("eat");} } public class TestInterface{ public static void main(String args[]){ TestInterface t=new TestInterface(); Person p=new Person(); t.m1(p); t.m2(p); t.m3(p); } public void m1(Runner f){f.run();} public void m2(Swimmer s){s.swim();} public void m3(Animal a){a.eat();} }
访问权限修饰符
多态
(1)概念
一个 事物 的多种形态
(2)代码中的多态(事 —— 方法的重写与重载)
重写:
要求:
发生在继承关系中,子类访问权限修饰符>=父类访问权限修饰符,返回值类型相同,方法名相同,形参列表相同,方法体不同
注意:
当某个对象重写了父类的方法,对象在调用方法名时,遵循就近原则,会调用子类重写后的方法;当子类未重写方法时,对象调用方法,其会调用父类的方法
重载:
要求:
发生在同一个类中,方法名相同,形参列表不同
(3)代码中的多态(物 —— 对象)
类A继承与类B
(父类对象可以看作是大数据类型,子类对象可以看作是小数据类型,其转换情况符合基本数据类型转换原则)
类名A 对象名A = new 类名A();
//子类对象转父类对象,可以自动转换
类名B 对象名B = 对象名A;
//父类对象转换子类对象,需要强制转换,有风险
类名A 对象名A2 = (类名A) 对象名B;
抽象类( abstract)
抽象方法:访问权限修饰符 abstract 返回值类型 方法名(形参列表); 1,抽象方法没有方法体 2,有抽象方法的类一定是抽象类 抽象类:访问权限修饰 abstract class 类名{ 属性 方法 构造函数 } 1,子类继承于抽象类,要么重写所有抽象方法,要么自己也是抽象类,抽象方法在子类中必须被实 现,否则子类仍是抽象的 2,抽象类无法直接创建对象,抽象类必须产生其子类,由子类创建对象。 3,抽象类中不一定有抽象方法 4,抽象方法一定在抽象类中
[例4-17] 抽象类举例 abstract class Shape { abstract double area(); abstract void draw(); } //上述方法对一般图形无法定义其实现 class Rectangle extends Shape { int width; int length; public double area() { //矩型类实现了Shape类的抽象方法area() return width*length; } public void draw () { … … //矩型类实现了Shape类的抽象方法draw(),详细可由读者自己完成} }
成员变量和局部变量
成员变量作用域:类内
局部变量:函数体内