智慧旅游门户网站建设方案,wordpress投票插件wp-polls,深圳福田区房价2022最新房价,网站开发安装环境二.面向对象
1.面向对象有哪些重要的关键字#xff1f;作用是什么#xff1f;
2.理解多态的使用#xff1f;
3.接口与抽象类的相同点和不同点#xff1f;
4.equals和toString的判断#xff1f;
5.新建对象的流程是什么#xff1f;new一个对象#xff1f;
6.深拷贝…二.面向对象
1.面向对象有哪些重要的关键字作用是什么
2.理解多态的使用
3.接口与抽象类的相同点和不同点
4.equals和toString的判断
5.新建对象的流程是什么new一个对象
6.深拷贝浅拷贝和引用拷贝的区别
7.类的多种类型
待更新
待更新
二.面向对象
1.面向对象有哪些重要的关键字作用是什么
①解决封装的三个关键字
private 类内缺省 类内包内protected 包内不同包的子类只能在子类内部访问到public 项目内注意代码块无需封装如果static修饰则是类加载执行而执行 如果无static修饰则是对象创建而执行。
②static关键字
static修饰 属性方法代码块内部类。不修饰构造器因为构造器在对象加载时采用。注意static修饰的代码块或方法内部只能访问static的成员变量。静态和非静态在JVM的运行 – 方法区加载类信息静态结构常量池并运行静态代码快。 – 堆区保存类new的对象并运行非静态代码块。 – 栈区保存对象的引用。
③final
不可继承 类不可更改 变量不可重写 方法
④abstract
抽象类抽象方法
2.理解多态的使用
①条件
类是继承关系子类重写了方法即父类引用调用子类重写的方法
②编译时多态和运行时多态
编译时多态方法重载 – java编译时即确定哪一个重载方法运行时多态方法重写 – 同一引用调用同样的方法做不同的事情 – 相当于子类向上转型为父类 – 建立变量的连接然后加载对象java编译规则规定父类引用可以指向子类对象
③动态绑定和静态绑定
静态绑定程序运行前就绑定方法到类上动态绑定程序在运行期间才确定方法运行时才知道属于哪个类 – 引用指向的具体实例的方法而不是引用变量类型的方法代码理解
package mianxiangduixiangtest;public class DongTaiJingTaitest {public static void main(String[] args) {Animal animal new Cat();animal.drink();animal.eat();//猫喝水//动物吃饭//即eat方法是与类静态绑定的在JVM类加载时就确定animal调用的是Animal的eat方法不需要创建对象//drink方法是与对象动态绑定的即在运行时才确定drink方法调用的是Cat中的drink方法}
}class Animal{static void eat(){System.out.println(动物吃饭);}void drink(){System.out.println(动物喝水);}
}
class Cat extends Animal{static void eat(){System.out.println(猫吃饭);}void drink(){System.out.println(猫喝水);}
}④理解多态
从编译运行角度 – 编译时java规定类只能调用自己结构中定义的方法且规定父类引用可以指向子类的实例只看语法 – 运行时由于类加载顺序或初始化顺序子类重写的方法覆盖了父类的原方法故实际上父类引用调用的方法为子类重写的方法只看引用指向的类加载的结构从反射的角度 – 事实上父类的引用可以调用子类个性的方法只不过只能在运行期间实现因为编译时会报错必须调用自己结构中定义的方法。 – 由此可以解释父类引用指向子类对象时在运行期间父类引用等同于子类引用 可以调用子类所有的方法和属性
⑤多态代码实现
package mianxiangduixiangtest;import java.lang.reflect.Method;public class DuoTaiTest {public static void main(String[] args) throws Exception {People p new Man();//p.eat()过编译运行时p实际上指向的是子类的结构故p可以调用子类的方法//输出男人吃饭p.eat();// p.drink(); 不过编译因为编译只能运行引用类型 类的结构Class aClass p.getClass();Method drink aClass.getDeclaredMethod(drink);//输出男人喝水drink.invoke(p);}
}
class People{void eat(){System.out.println(人吃饭);}
}
class Man extends People{void eat(){System.out.println(男人吃饭);}void drink(){System.out.println(男人喝水);}
}3.接口与抽象类的相同点和不同点
接口 方法完全抽象implements无构造器默认public也只能是 子类实现接口必须重写。抽象类 可以有默认实现extends有构造器所有封装都可 子类继承抽象类不重写成为抽象类。两者都无法实例化都可以作为多态的引用代码
package mianxiangduixiangtest;public class ChouJieTest {
}interface Cup{void Size();
}
abstract class Cup1{//接口可以有默认实现static void Size1(){System.out.println(大尺寸);}abstract void Size();
}4.equals和toString的判断
Object类的equals底层判断 实现的类需要重写equals和toString
5.新建对象的流程是什么new一个对象的流程
①类加载
类加载到方法区中原因方便JVM找.class文件
②开辟内存空间
开辟堆内存空间原因寻找对象需要的内存空间
③初始化成员变量
初始化父类 静态变量或静态代码块初始化子类 静态变量或静态代码块父类普通变量-初始化代码块-构造方法子类普通便利-初始化代码块-构造方法
④引用变量建立连接
6.深拷贝浅拷贝和引用拷贝的区别
①三者概念
深拷贝堆中创建新对象类中的引用类型也是创建新对象浅拷贝堆中创建新对象类中的引用类型复制引用地址引用拷贝两个引用指向同一堆对象
②拷贝实现
Object类中的clone方法 – 能够复制一个新的对象在堆内存中(super.clone),复制结果为Object,需要进行类型强转 – native方法非java实现是protected类型的Cloneable接口 – 标记接口 –只有实现这个接口后然后在类中重写Object中的clone方法然后通过类调用clone方法才能克隆成功,调用中JVM底层方法判断类是否有标记接口Cloneable有则克隆成功。深拷贝与浅拷贝实现 – 深拷贝自己和每个成员属性都实现Cloneable接口并重写clone – 浅拷贝自己实现Cloneable接口重写clone即可
③代码实战
package mianxiangduixiangtest;public class ShengQianCopyTest {public static void main(String[] args) throws Exception{Paper paper new Paper();Paper clone (Paper)paper.clone();System.out.println(paper clone);System.out.println(paper.treeclone.tree);//浅复制时第一个结果false,第二个结果为true,说明确实赋复制了新对象,但是对象内部的引用属性为赋值Paper1 paper1 new Paper1();Paper1 clone1 paper1.clone();System.out.println(paper1 clone1);System.out.println(paper1.tree1clone1.tree1);//深复制时,第一个结果和第二个结果都为false,说明确实复制了新对象并且对象内部的对象属性也被赋值}
}class Paper implements Cloneable{Tree tree;Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
class Tree{}
class Paper1 implements Cloneable{Tree1 tree1 new Tree1();Overrideprotected Paper1 clone() throws CloneNotSupportedException {Paper1 paper1 (Paper1)super.clone();paper1.tree1 (Tree1) this.tree1.clone();return paper1;}
}
class Tree1 implements Cloneable{Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}7.类的多种类型
①同级类
.java文件中有多个同级类编译后多个.class文件public只能修饰其中一个
②内部类
即分为局部内部类和成员内部类 – 局部内部类定义在代码块和方法中 – 成员内部类定义在类中成员内部类分为非静态成员内部类和静态成员内部类其中还有匿名内部类只能使用一次。非静态成员内部类无法脱离外部类实例来实例化成员属性静态内部类 – 访问静态外部成员 – 实例化不依赖于外部类实例化外部对象可以访问外部非静态结构匿名内部类是某个类的子类局部内部类方法或代码块中
③代码示例
package mianxiangduixiangtest;public class NeiBuLeiTest {public static void main(String[] args) {//静态内部类可以通过外部类.内部类来实例化Person.Inner1 inner1 new Person.Inner1();//成员内部类必须通过外部类的实例化来实例化Person person new Person();Person.Inner inner person.new Inner();}
}class Person{//成员内部类class Inner{}//静态内部类static class Inner1{}//匿名内部类Dog dog new Dog(){};//局部内部类{class Cat{}}}
class Dog{}
未更新
未更新