A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游小星 中级黑马   /  2015-11-18 22:11  /  993 人查看  /  13 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文


05.18_面向对象(方法的形式参数是类名的时候如何调用)(掌握)
* A:方法的参数是类名public void print(Student s){}//print(new Student());
        * 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
案例:
class Demo1_Student {
        public static void main(String[] args) {
                print(10);
                Student s = new Student();                                        //创建对象,并将对象的地址值赋值给s
                print(s);
        }
        public static void print(int x) {                                //基本数据类型当作形式参数
                System.out.println(x);
        }
        public static void print(Student stu) {                        //引用数据类型当作形式参数
                stu.name = "张三";
                stu.age = 23;
                stu.speak();
        }
}
/*
* A:方法的参数是类名public void print(Student s){}//print(new Student());
        * 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
*/
class Student {
        String name;                                        //姓名
        int age;                                                //年龄
        public void speak() {
                System.out.println(name + "..." + age);
        }
}





* A:什么是匿名对象
        * 没有名字的对象
* B:匿名对象应用场景
        * a:调用方法,仅仅只调用一次的时候。
                * 那么,这种匿名调用有什么好处吗?
                        * 节省代码
                * 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
        * b:匿名对象可以作为实际参数传递

* A:封装概述
        * 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

* B:封装好处
        * 隐藏实现细节,提供公共的访问方式
        * 提高了代码的复用性
        * 提高安全性。
* C:封装原则
        * 将不需要对外提供的内容都隐藏起来。
        * 把属性隐藏,提供公共方法对其访问。
B:private关键字特点
        * a:是一个权限修饰符
        * b:可以修饰成员变量和成员方法
        * c:被其修饰的成员只能在本类中被访问
###07.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用)
* A:代码块概述
        * 在Java中,使用{}括起来的代码被称为代码块。
* B:代码块分类
        * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
        局部代码块:只要是和局部有关系的,都是和方法有关系的
        局部变量:在方法声明上或者在方法内部
* C:常见代码块的应用
        * a:局部代码块
                * 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
        * b:构造代码块 (初始化块)
                * 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
        * c:静态代码块
                * 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
                * 一般用于加载驱动


* A:this和super都代表什么
        * this:代表当前对象的引用,谁来调用我,我就代表谁
        * super:代表当前对象父类的引用
* B:this和super的使用区别
        * a:调用成员变量
                * this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
                * super.成员变量 调用父类的成员变量
        * b:调用构造方法
                * this(...)        调用本类的构造方法
                * super(...)        调用父类的构造方法
        * c:调用成员方法
                * this.成员方法 调用本类的成员方法,也可

A:案例演示
        * 父类没有无参构造方法,子类怎么办?
        * super解决:用super(....)显式调用父类的有参构造,如:super(name,age);->super("zs",30);
        * this解决:通过this调用本类的有参构造,然后在本类的有参构造里,又调用了父类的有参构造,相当于间接调用父类的有参构造.
* B:注意事项
        * super(…)或者this(….)必须出现在构造方法的第一条语句上,只能出现其一

* A:方法重写注意事项
        * a:父类中私有方法不能被重写
                * 因为父类私有方法子类根本就无法继承,既然子类无法继承,就谈不上重写了
        * b:子类重写父类方法时,访问权限不能更低
                * 最好就一致
        * c:父类静态方法,子类也必须通过静态方法进行重写
                * 其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)
               
        * 子类重写父类方法的时候,最好声明一模一样。

A:final概述
* B:final修饰特点
        * 修饰类,类不能被继承
        * 修饰变量,变量就变成了常量,只能被赋值一次
        * 修饰方法,方法不能被重写(有时所有方法都很重要,都不需要被重写,需要将类定义成final的)
        * 基本类型,是值不能被改变
        * 引用类型,是地址值不能被改变,对象中的属性可以改变
* A:多态(polymorphic [,p?l?'m??f?k])概述
        * 事物存在的多种形态
* B:多态前提
        * a:要有继承关系。
        * b:要有方法重写。
        * c:要有父类引用指向子类对象。


* 成员变量
        * 编译看左边(父类),运行看左边(父类)。
/*
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边


A:多态的好处
        * a:提高了代码的维护性(继承保证)
        * b:提高了代码的扩展性(由多态保证)
* C:多态的弊端
        * 不能使用子类的特有属性和行为。
A:抽象类概述
        * 抽象就是看不懂的
* B:抽象类特点
        * a:抽象类和抽象方法必须用abstract关键字修饰
                * abstract class 类名 {}
                * public abstract void eat();//当不知道该方法具体是怎么实现的
                //比如动物吃,你知道它吃什么吗?怎么吃?都不知道
        * b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
        * c:抽象类不能实例化那么,抽象类如何实例化呢?
                * 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
        * d:抽象类的子类
                * 要么是抽象类
                * 要么重写抽象类中的所有抽象方法
A:抽象类的成员特点
        * a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
        * b:构造方法:有。
                * 用于子类访问父类数据的初始化。
        * c:成员方法:既可以是抽象的,也可以是非抽象的。
* B:案例演示
        * 抽象类的成员特点
* C:抽象类的成员方法特性:
        * a:抽象方法 强制要求子类做的事情。
        * b:非抽象方法 子类继承的事情,提高代码复用性。
* A:接口成员特点
        * 成员变量只能是常量,并且是静态的并公共的。
                        * 默认修饰符:public static final
                        * 建议:自己手动给出。
        * 构造方法:接口没有构造方法。
        * 成员方法:只能是抽象方法。
                        * 默认修饰符:public abstract
                        * 建议:自己手动给出。
#08.19_面向对象(抽象类和接口的区别)
* A:成员区别
        * 抽象类:
                * 成员变量:可以变量,也可以常量
                * 构造方法:有
                * 成员方法:可以抽象,也可以非抽象
        * 接口:
                * 成员变量:只可以常量
                * 成员方法:只可以抽象       
* B:关系区别
        * 类与类
                * 继承,单继承
        * 类与接口
                * 实现,单实现,多实现
        * 接口与接口
                * 继承,单继承,多继承
               
* C:设计理念区别
        * 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
        * 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
        * 对事物本质的抽象用抽象类,对事物功能的扩展用接口

* A:定义包的格式
        * package 包名;
        * 多级包用.分开即可
* B:定义包的注意事项
        * A:package语句必须是程序的第一条可执行的代码
        * B:package语句在一个java文件中只能有一个
        * C:如果没有package,默认表示无包名

                                        本类         同一个包下(子类和无关类)        不同包下(子类)              不同包下(无关类)
                private                 Y               
                默认                        Y                Y
                protected        Y                Y                                                        Y
                public                Y                Y                                                        Y                                Y



* B:成员内部类被静态修饰后的访问方式是:
        * 外部类名.内部类名 对象名 = 外部类名.内部类对象;
* 局部内部类访问局部变量必须用final修饰
        * 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
                因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用



13 个回复

倒序浏览
不错,顶一个
回复 使用道具 举报
写的很好  值得推荐学习!看完能帮助到我  顿时茅塞顿开 很棒  !!
回复 使用道具 举报
八错八错!
回复 使用道具 举报
不错,学习了。。。。
回复 使用道具 举报
学习了,真的总结的很好
回复 使用道具 举报
支持一下!!
回复 使用道具 举报

亲,送点黑马币吧!马上点招了,剩下的马上更!谢谢拉!
回复 使用道具 举报
袁有福123 发表于 2015-11-18 22:37
写的很好  值得推荐学习!看完能帮助到我  顿时茅塞顿开 很棒  !!

亲,送点黑马币吧!马上点招了,剩下的马上更!谢谢拉!
回复 使用道具 举报
yubail 中级黑马 2015-11-19 22:57:30
10#
支持一下
回复 使用道具 举报
赞赞赞.........
回复 使用道具 举报
写的好,值得学习!
回复 使用道具 举报
值得好好学习!
回复 使用道具 举报
jlq 中级黑马 2015-11-19 23:47:26
14#
bucuo zhichiyixia
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马