前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java基础学习_面向对象(下)03_day10总结

java基础学习_面向对象(下)03_day10总结

作者头像
黑泽君
发布2018-10-11 17:09:12
3410
发布2018-10-11 17:09:12
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

============================================================================= ============================================================================= 涉及的知识点有: 1:方法的形式参数和方法的返回值的问题(理解)     (1)方法的形式参数为引用数据类型     (2)方法的返回值类型为引用数据类型     (3)链式编程 2:包(理解)     (1)包其实就是文件夹。     (2)包的作用     (3)包的定义(掌握)     (4)包的注意事项(掌握)     (5)带包的编译和运行     (6)Java中不同包下的类与类之间的访问 3:导包(掌握)     (1)导包的原因     (2)导包的格式     (3)package,import,class有没有顺序关系呢? 4:权限修饰符(掌握)     (1)权限修饰符的权限测试     (2)这四种权限修饰符在任意时刻只能出现一种。 5:类及其组成所使用的常见修饰符(理解)     (1)修饰符的分类     (2)常见的类及其组成所使用的修饰符       1.修饰类的       2.修饰成员变量的       3.修饰构造方法的       4.修饰成员方法的     (3)另外比较常见的修饰符组合规则 6:内部类(理解)     (1)把类定义在另一个类的内部,该类就被称为内部类。     (2)内部类的访问特点     (3)内部类的分类(内部类的位置)     (4)成员内部类     (5)成员内部类的面试题(填空)     (6)局部内部类     (7)匿名内部类(很重要掌握)     (8)匿名内部类在开发中的使用     (9)匿名内部类的面试题(补齐代码) ============================================================================= ============================================================================= 1:方法的形式参数和方法的返回值的问题(理解) (1)方法的形式参数为引用数据类型: 1.方法的形式参数为类名时:需要该类的对象。(匿名对象的时候已经讲过了) 2.方法的形式参数为抽象类名时:需要该抽象类的子类对象。 3.方法的形式参数为接口名时:需要该接口的实现类对象。 (2)方法的返回值类型为引用数据类型: 1.方法的返回值类型为类名时:返回的是该类的对象。 2.方法的返回值类型为抽象类名时:返回的是该类的子类对象。 3.方法的返回值类型为接口名时:返回的是该接口的实现类的对象。 (3)链式编程     对象.方法1().方法2().方法3(). ……… .方法n(); 这种用法: 其实     在方法1()调用完毕后,应该一个对象;     方法2()调用完毕后,应该返回一个对象。     方法3()调用完毕后,应该返回一个对象。     …………     方法n()调用完毕后,返回的可能是对象,也可以不是对象。 ----------------------------------------------------------------------------- 2:包(理解) (1)包其实就是文件夹。 (2)包的作用: A:区分同名的类(即把具有相同类名的类放到不同的包中)。 B:对类进行分类管理。 a:包按照功能分 cn.itcast.add 增加功能的包           AddStudent 增加学生的类           AddTeacher 增加老师的类 cn.itcast.delete 删除功能的包           DeleteStudent 删除学生的类           DeleteTeacher 删除老师的类 cn.itcast.update 修改功能的包           UpdateStudent 修改学生的类           UpdateTeacher 修改老师的类 cn.itcast.find 查找功能的包           FindStudent 查找学生的类           FindTeacher 查找老师的类 b:包按照模块分 cn.itcast.student 学生的包           AddStudent 增加学生的类           DeleteStudent 删除学生的类           UpdateStudent 修改学生的类           FindStudent 查找学生的类 cn.itcast.teacher 老师的包           AddTeacher 增加老师的类           DeleteTeacher 删除老师的类           UpdateTeacher 修改老师的类           FindTeacher 查找老师的类 小结:开发中,两种分类方式结合使用。 --------------------------------------- (3)包的定义(掌握)     定义包的格式:       package 包名;     多级包用.分开。 (4)包的注意事项(掌握):     A:package语句必须是程序的第一条可执行的代码。(可执行=可被虚拟机识别)     B:package语句在一个java文件中只能有一个。     C:如果没有package,默认表示无包名。 --------------------------------------- (5)带包的编译和运行 A:手动式       a:编写一个带包的Xxx.java文件。         例如:           package cn.itcast;           class HelloWorld {             public static void main(String[] args) {               System.out.println("HelloWorld");             }           }       b:通过javac命令编译该Xxx.java文件,生成对应的Xxx.class文件。       c:手动创建包名。       d:把b步骤的Xxx.class文件放到c步骤的最底层包。       e:回到和包根目录在同一目录的地方,然后带包运行。         格式:java cn.itcast.Xxx --------------------------------------- B:自动式(掌握)       a:编写一个带包的Xxx.java文件。       b:javac编译的时候带上-d即可         格式:javac -d . Xxx.java       c:回到和包根目录在同一目录的地方,然后带包运行         格式:java cn.itcast.Xxx --------------------------------------- (6)Java中不同包下的类与类之间的访问

----------------------------------------------------------------------------- 3:导包(掌握)  (1)导包的原因:我们多次使用一个带包的类,都需要加包的全路径非常的麻烦,这个时候,Java就提供了导包的功能,提供了一个关键字import。 (2)导包的格式:

java.lang不需要导入     import xxx.yyy.类名;       这种方式导入的是:导入到类的级别。     另一种:     import xxx.yyy.*;(不建议)  (3)package,import,class有没有顺序关系呢?     有。     package > import > class     package:只能有一个     import:可以有多个     class:可以有多个,以后建议是一个。(因为每一个类是一个独立的单元) ----------------------------------------------------------------------------- 4:权限修饰符(掌握) (1)权限修饰符的权限测试

小结:protected修饰的东西其实就是给子类用的。       所以以后在设计父类的时候,可以把private修饰的成员变量用protected修饰,       这样子类中就可以使用this关键字了,比如:this.name = name;       但是其实这样的做法不是很多,还是建议用private修饰最好。 --------------------------------------- (2)这四种权限修饰符在任意时刻只能出现一种。   public class Demo {} ----------------------------------------------------------------------------- 5:类及其组成所使用的常见修饰符(理解) (1)修饰符的分类:     权限修饰符:private、默认、protected、public     状态修饰符:static、final     抽象修饰符:abstract (2)常见的类及其组成所使用的修饰符: 1.修饰类的:      有:默认、public、final、abstract         示例如下:           class Demo {}        //默认修饰符           public class Demo {}           final class Demo {}     //最终类,不能被继承。           abstract class Demo {}    //抽象类 常用类的修饰符:public class Demo {} 特别注意:静态不可以修饰外部类,但是可以修饰内部类。 --------------------------------------- 2.修饰成员变量的: 有:private、默认、protected、public、static、final 示例如下:           private int x = 10;           int y = 20;           protected int z = 30;           public int a = 40;

          public final int b = 50;       //表示自定义的常量           public static int c = 60;     //表示定义的通过类名访问的变量           public static final int d = 70;  //表示自定义的通过类名访问的常量 常用成员变量的修饰符:private int x = 10; --------------------------------------- 3.修饰构造方法的:       有:private、默认、protected、public         示例如下:           private Demo(){}           Demo(String name){}           protected Demo(String name, int age) {}           public Demo(String name, int age, String address) {} 常用构造方法的修饰符:public Demo(String name, int age, String address) {}

小结:构造方法只能使用权限修饰符,即构造方法只提供访问权限,不提供其他的。

--------------------------------------- 4.修饰成员方法的:       有:private、默认、protected、public、static、final、abstract         示例如下:           private void show() {}           void show() {}           protected void show() {}           public void show() {}

          static void show() {}  //静态方法,只能通过类名访问           abstract void show();  //抽象方法           final void show() {}   //最终方法 常用成员方法的修饰符:public void show() {} ---------------------------------------  (3)另外比较常见的修饰符组合规则: 示例如下: 修饰成员变量的:         public static final int x = 10; //定义一个静态的最终变量(常量),只能通过类名访问 修饰成员方法的:         public static void show() {}         public abstract void show();         public final void show() {} ----------------------------------------------------------------------------- 6:内部类(理解) (1)把类定义在另一个类的内部,该类就被称为内部类。 举例:把类B定义在类A中,类B就被称为内部类。 (2)内部类的访问特点:     A:内部类可以直接访问外部类的成员,包括私有成员。     B:外部类要想访问内部类成员,必须创建内部类的对象,通过内部类的对象去访问。 (3)内部类的分类(内部类的位置):     A:成员位置:在类中的成员位置定义的类,被称为成员内部类。     B:局部位置:在类中的局部位置定义的类,被称为局部内部类。 --------------------------------------- (4)成员内部类 成员内部类的常见修饰符及应用       A:private 为了保证数据的安全性       B:static 为了方便访问数据 注意:静态的内部类访问外部类的数据时,外部类的数据必须用静态修饰。 成员内部类不被静态修饰后的访问格式是:       外部类名.内部类名 对象名 = new 外部类名.new 内部类名(); 成员内部类被静态修饰后的访问格式是:       外部类名.内部类名 对象名 = new 外部类名.内部类名(); --------------------------------------- (5)成员内部类的面试题(填空) 注意:       1:内部类和外部类没有继承关系。(这样你就不会使用super去访问外部类的成员变量了)       2:通过外部类名限定this对象。         Outer.this

代码语言:javascript
复制
 1 class Outer {
 2     public int num = 10;
 3             
 4     class Inner {
 5         public int num = 20;
 6                 
 7         public viod show() {
 8             int num  = 30;
 9                     
10             System.out.println(num); //30
11             System.out.println(this.num); //20
12             System.out.println(Outer.this.num); //10  通过外部类名限定this对象。
13             System.out.println(new Outer().num);//10  通过创建外部类对象,来调用外部类的成员变量。
14         }
15     }
16 }
17 class InnerClassTest {
18     public static void main(String[] args) {
19         Outer.Inner oi = new Outer().new Inner();
20         oi.show();
21     }    
22 }

--------------------------------------- (6)局部内部类     A:局部内部类可以直接访问外部类的成员。     B:局部内部类在局部位置可以创建内部类对象,通过内部类对象调用内部类方法,来使用局部内部类功能。 C:局部内部类访问局部变量,局部变量必须加final修饰。为什么呢?       因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失, 局部对象还要使用这个局部变量。为了让数据还能继续被使用,就用fianl修饰局部变量,       这样,在堆内存里面存储的其实是一个常量值。通过反编译工具可以看一下。       通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是局部变量名。 --------------------------------------- (7)匿名内部类(很重要掌握)     A:匿名内部类是局部内部类的简化形式。 B:匿名内部类的前提: 存在一个类或者接口。         这里的类可以是具体类也可以是抽象类。 C:格式:       new 类名或者接口名() {         重写方法;       } D: 匿名内部类的本质是什么呢?       答:是一个继承了该类的子类或者实现了该接口的实现类的匿名对象。       简言之:匿名内部类是一个子类的匿名对象。 再简言之:匿名内部类是子类的对象。 小结:匿名内部类是一个结合体,是子类和对象的结合体。 --------------------------------------- (8)匿名内部类在开发中的使用     我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。     而这个时候,我们知道实际需要的是一个子类的对象。     如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。     Android开发中这种格式见得多,     JavaEE开发中见得少。     为什么呢?     因为匿名内部类的好处是:       匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,       栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。

代码语言:javascript
复制
 1 interface Person {
 2     public abstract void study();
 3 }
 4         
 5 class PersonDemo {
 6     public void method(Person p) {
 7         p.study();
 8     }
 9 }
10         
11 class PersonTest {
12     public static void main(String[] args) {
13         PersonDemo pd = new PersonDemo();
14         pd.method(new Person() {
15             public void study() {
16                 System.out.println("好好学习,天天向上");
17             }
18         });
19     }
20 }

--------------------------------------- (9)匿名内部类的面试题(补齐代码)

代码语言:javascript
复制
 1 interface Inter {
 2     void show();
 3 }
 4         
 5 class Outer {
 6     //补齐代码
 7     public static Inter method() {
 8         return new Inter() {
 9             public void show() {
10                 System.out.println("HelloWorld");
11             }    
12         };
13     }
14 }
15         
16 class OuterDemo {
17     public static void main(String[] args) {
18         Outer.method().show(); //"HelloWorld"
19     }
20 /*
21     1:Outer.method()可以看出method()应该是Outer中的一个静态方法。
22     2:Outer.method().show()可以看出method()方法的返回值是一个对象。
23         又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
24 */
25 }

=============================================================================

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档