以网站建设为开题报告建设网站哪家公司比较好
2026/2/27 23:42:15 网站建设 项目流程
以网站建设为开题报告,建设网站哪家公司比较好,公司简介模板范本,做网站公司徐汇一.什么是类在Java中#xff0c;类#xff08;class#xff09;是对象的蓝图或模版#xff0c;它定义了一类对象共有的属性#xff08;数据#xff09;和行为#xff08;方法#xff09;。类是面向对象编程#xff08;oop#xff09;的核心概念#xff0c;Java程序本…一.什么是类在Java中类class是对象的蓝图或模版它定义了一类对象共有的属性数据和行为方法。类是面向对象编程oop的核心概念Java程序本质是由一系列类构成的。二.类的构成类包含三大核心成员1.成员变量描述对象的状态或属性2.成员方法定义对象的行为或功能3.构造器构造方法初始化新创建的对象三.内部类内部类是定义在另一个类内部的类。它就像类的“成员”一样可以访问外部类的所有成员包括私有的是实现高内聚的强大工具。而外部类要想调用内部类的方法或属性必须先创建内部类的对象。使用内部类的优势更好的封装将仅服务于外部类的逻辑隐藏起来外部不可见直接访问内部类持有外部类的引用可以访问外部类的所有成员代码组织相关类放在一起提高可读性回调机制内部类是实现事件监听、线程执行的利器1.内部类的分类1.成员内部类不加static与实例变量实例方法同级别成员内部类被protected修饰时同包或者其他包的类的子类可以访问这个内部类成员内部类被public修饰时访问权限完全公开在JDKJava Development KitJava开发工具16及以后成员内部类中可以写静态变量下面看一些代码如1.在其他外部类中获取内部类的方式方式1外部类名.内部类名 对象名 new 外部类名().new 内部类名()在同一包中Outer.javapublic class Outer { // 内部类Inner是默认没有被任何修饰符修饰的在本包每个java文件中可以被任意访问 class Inner{ } }Test.javapublic class Test { public static void main(String[] args){ // 获取成员内部类的方式 Outer.Inner oi new Outer().new Inner(); // 数据类型 变量名 用Outer()对象去调用Inner()内部类 } }方式2如果内部类被private关键字修饰使得外界无法访问只能在外部类的内部访问如public class Outer { private class Inner{ } }那么在Test.java即其他外部类中就不能按照方式1来创建内部类的对象这时候就需要在外部类Outer中编写方法对外提供Inner内部类的对象public class Outer { private class Inner{ } public Inner getInner(){ return new Inner(); } }public class Test { public static void main(String[] args){ // 获取成员内部类的方式 // Outer.Inner oi new Outer().new Inner(); // 数据类型 变量名 用Outer()对象去调用Inner()内部类 Outer o new Outer(); Outer.Inner inner o.getInner(); } }这时Test.java中还是报错因为Inner类被private修饰不能被外界访问了改成利用了多态public class Test { public static void main(String[] args){ // 获取成员内部类的方式 // Outer.Inner oi new Outer().new Inner(); // 数据类型 变量名 用Outer()对象去调用Inner()内部类 Outer o new Outer(); //Outer.Inner inner o.getInner(); Object inner o.getInner(); System.out.println(inner); } }运行Test.java会输出内部类.Outer$Inner3f99bd52其中内部类是我写的包名用的中文、Outer是外部类Inner是内部类外部类和内部类用美元$符号进行了分隔以示区分、后面的3f99bd52是Test.java中内部类Inner对象o的内存地址。2.外部类的成员变量和内部类的成员变量重名这个时候怎么去获取不同位置变量的值呢Outer.javapackage 内部类; public class Outer { int a 10; private class Inner{ private int a 20; public void show(){ int a 30; System.out.println(a); } } public Inner getInner(){ return new Inner(); } }Test.javapackage 内部类; public class Test { public static void main(String[] args){ Outer o new Outer(); Object inner o.getInner(); Inner actualInner (Inner) inner; // 强转类型 actualInner.show(); } }报错分析o.getInner()返回的是内部类Inner的实例不过被赋值给了Object类型的对象。Object类型对象只能访问其自身定义的方法无法使用内部类特有的show方法即使强转也无济于事因为Inner类被private修饰其他外部类不能直接访问解决最直接的方法是将private改为public而因为Outer.java和Test.java在同一个包中改成默认形式也可以package 内部类; public class Outer { int a 10; class Inner{ private int a 20; public void show(){ int a 30; System.out.println(a); } } }package 内部类; public class Test { public static void main(String[] args){ // 创建内部类的对象 Outer.Inner io new Outer().new Inner(); io.show(); } }输出30这是因为”就近原则“在Outer.java中离sout(a)最近的变量a的值为30如果要输出Inner类中的成员变量a的值即值为20的a需要加上this关键字this表示方法调用者即Inner对象oi的地址值package 内部类; public class Outer { int a 10; class Inner{ private int a 20; public void show(){ int a 30; System.out.println(this.a); } } }如果要输出Outer类的成员变量a的值即值为10的a不能用supper因为supper表示是父类的引用应该用外部类的类名去调用即Outer并加上.thispackage 内部类; public class Outer { int a 10; class Inner{ private int a 20; public void show(){ int a 30; System.out.println(Outer.this.a); } } }2.静态内部类被static修饰的内部类称为静态内部类静态内部类只能访问外部类中的静态方法和静态变量因为静态的东西是在全局共享的要访问非静态的方法和变量要先创建静态内部类的对象。创建方式外部类名.内部类名 对象名 new 外部类名.内部类名();package 内部类; public class Outer { static class Inner{ public void show1(){ System.out.println(静态类中的非静态方法被调用了); } public static void show2(){ System.out.println(静态类中的静态方法被调用了); } } }package 内部类; public class Test { public static void main(String[] args){ // 由于Inner被static修饰不能在其他外部类中创建Inner的对象 // 由于被static修饰后是全局共享的要调用Inner的成员变量或成员方法直接外部类类名.静态内部类类名.成员变量名/成员方法名() // 又由于show1方法是非静态方法虽然通过对象名来调用或所属类名即Inner类名来调用 // 但是Inner是静态类静态类不能调用非静态成员无论是成员方法还是成员变量 // 所以Outer.Inner.show1(); 自然会报错 Outer.Inner.show2(); } }输出静态类中的静态方法被调用了package 内部类; public class Test { public static void main(String[] args){ // 创建内部类的对象 //Outer.Inner io new Outer().new Inner(); // 这样是通过创建外部类实例来创建内部类实例但是被static修饰后内部类不能再依赖与外部类的实例来创建内部类实例了 // 正确的创建内部类实例 Outer.Inner io new Outer.Inner(); // 静态内部类是全局共享的只能通过外部类类名来调用或创建实例 io.show1(); } }输出静态类中的非静态方法被调用了同理静态成员变量也一样。只要记住静态类只能访问静态的东西或静态内部类只能被类名.来访问。静态内部类中要访问非静态的东西必须要创建对象package 内部类; public class Test { public static void main(String[] args){ // 创建内部类的对象 //Outer.Inner io new Outer().new Inner(); // 这样是通过创建外部类实例来创建内部类实例但是被static修饰后内部类不能再依赖与外部类的实例来创建内部类实例了 // 正确的创建内部类实例 Outer.Inner io new Outer.Inner(); // 静态内部类是全局共享的只能通过外部类类名来调用或创建实例 io.show1(); io.show2(); // 由于静态方法是全局共享的所以可以被调用 } }输出静态类中的非静态方法被调用了静态类中的静态方法被调用了3.局部内部类被定义在方法里面的内部类称为局部内部类类似于方法里面的局部变量所以publicprotectedprivatestatic都不能修饰局部内部类就像它们也不能用来修饰局部变量它们只能用来修饰成员package 内部类; public class Outer { int b 100; public void method(){ int a 10; class Local{ String name; void show(){ System.out.println(a); System.out.println(b); System.out.println(局部内部类的非静态方法被调用了); } static void show2(){ // System.out.println(this.a); // 报错java: 无法从静态上下文中引用非静态 变量 this。而且静态方法中是没有this关键字的 // 解决方法有两种一是去掉static二是将a当成参数传进show2方法中 System.out.println(局部内部内的静态方法被调用了); } } Local l new Local(); // 创建局部内部类对象才能调用局部内部类中的方法 l.show(); l.show2(); Local.show2(); // 这种调用方式IDEA会有show2方法的提示上一行的调用方式则没有提示 } }package 内部类; public class Test { public static void main(String[] args){ Outer o new Outer(); o.method(); } }输出:10100局部内部类的非静态方法被调用了局部内部内的静态方法被调用了局部内部内的静态方法被调用了4.匿名内部类匿名内部类本质上就是隐藏了名字的内部类格式new 类名/接口名(){ 重写方法; };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询