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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2016-8-22 11:26 编辑


【济南中心】JAVA编程阶梯:基础篇之第八章

  • 代码块
代码块概述:
     * 在Java中,使用{}括起来的代码被称为代码块。
代码块分类:
    * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
常见代码块:
    * a:局部代码块
        在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    * b:构造代码块 (初始化块)
        在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
    * c:静态代码块
        在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
        一般用于加载驱动
[Java] 纯文本查看 复制代码
class Text {
        static {
                System.out.println("静态代码块");
        }

        {
                System.out.println("构造代码块");
        }

        public Text() {
                System.out.println("构造方法");
        }
}

public class Demo {
        static {
                System.out.println("Demo静态代码块");
        }

        public static void main(String[] args) {
                System.out.println("我是main方法");

                Text s1 = new Text();
                Text s2 = new Text();
        }
}
运行结果:
可以看出,执行顺序  静态代码块>构造代码块>构造函数

  • 面向对象之继承
继承(extends)概念:
     让类与类之间产生关系,子父类关系
继承的好处:
    * a:提高了代码的复用性
    * b:提高了代码的维护性
    * c:让类与类之间产生了关系,是多态的前提
继承的弊端:
    * 类的耦合性增强了。
    * 开发的原则:高内聚,低耦合。
    * 耦合:类与类的关系
    * 内聚:就是自己完成某件事情的能力

继承的特点:
    * a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)
        * 有些语言是支持多继承,格式:extends 类1,类2,...
    * b:Java支持多层继承(继承体系
)
        * 如果想用这个体系的所有功能用最底层的类创建对象
        * 如果想看这个体系的共性功能,看最顶层的类

继承的注意事项:
    * a:子类只能继承父类所有非私有的成员(成员方法和成员变量)
    * b:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
    * c:不要为了部分功能而去继承

什么时候使用继承:
    * 继承其实体现的是一种关系:"is a"。
如果有两个类A,B。只有他们符合AB的一种,或者BA的一种,就可以考虑使用继承。
下面举个栗子让大家了解一下继承的使用:
[Java] 纯文本查看 复制代码
class Animal {
        void call() {
                System.out.println("叫...");
        }

        void run() {
                System.out.println("跑...");
        }
}

class Felidae extends Animal {
        void shelter() {
                System.out.println("隐藏....");
        }

}

class Canidae extends Animal {
        void hunting() {
                System.out.println("捕猎....");
        }
}

class Dog extends Canidae {
        void eat() {
                System.out.println("吃骨头....");
        }
}

class Cat extends Felidae {
        void eat() {
                System.out.println("吃鱼....");
        }
}

public class Demo {

        public static void main(String[] args) {
                Dog dog = new Dog();
                dog.eat();
                dog.hunting();
                dog.run();
                Cat cat = new Cat();
                cat.eat();
                cat.shelter();
                cat.call();
        }
}

运行结果:

  • this和super的区别和应用:
this和super的用法很相似。
this代表本类对象的引用。
uper代表父类的内存空间的标识。
this和super的使用区别:
    * a:调用成员变量
        *this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
        *super.成员变量 调用父类的成员变量
    * b:调用构造方法
        *this(...)    调用本类的构造方法
        *super(...)    调用父类的构造方法
    * c:调用成员方法
        *this.成员方法 调用本类的成员方法,也可以调用父类的方法
        *super.成员方法 调用父类的成员方法

[Java] 纯文本查看 复制代码
class Fu {
        String name = "老王";
        int age = 40;

        void chageData() {
                name = "老李";
        }
}

class Zi extends Fu {
        String name = "小王";

        void chageData() {
                age = 20;
        }

        void show1() {
                System.out.println(this.name + "..." + this.age);// 调用子类的,子类没有的去父类找
                System.out.println(super.name + "..." + super.age);// 调用父类的
                chageData();// 调用子类的方法
                super.chageData();// 调用父类的方法
                System.out.println(super.name + "..." + super.age);// 调用父类的

        }
}

public class Demo {
        public static void main(String[] args) {
                Zi zi = new Zi();
                zi.show1();
        }
}

运行结果:

子类中所有的构造方法默认都会访问父类中空参数的构造方法
每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。

[Java] 纯文本查看 复制代码
class Fu {
        String name;
        int age;

        public Fu() {

        }

        public Fu(String name, int age) {
                this.name = name;
                this.age = age;
        }

}

class Zi extends Fu {

        public Zi() {
                this("小李");// 调用自己的一个参数的构造方法
        }

        public Zi(String name) {
                super(name, 30);//调用父类有两个参数的构造方法
        }

        void show1() {
                System.out.println(this.name + "..." + this.age);// 调用子类的,子类没有的去父类找

        }
}

public class Demo {
        public static void main(String[] args) {
                Zi zi = new Zi();
                zi.show1();
        }
}
运行结果:
继承中构造方法的注意事项:
如果父类没有无参构造方法,子类需要手动的调用super或者this调用父类或者自己的有参构造方法
super(…)或者this(….)必须出现在构造方法的第一条语句上

  • 方法重写概述及其应用
重写:子父类出现了一模一样的方法
方法重写的应用:
    * 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。 子类对象调用方法的时候先找子类本身,再找父类。
方法重写注意事项
    * a:父类中私有方法不能被重写
        * 因为父类私有方法子类根本就无法继承
    * b:子类重写父类方法时,访问权限不能更低
        * 最好就一致
    * c:父类静态方法,子类也必须通过静态方法进行重写
        * 其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)
        * 子类重写父类方法的时候,声明一模一样,与返回值类型有关,返回值是一致(或者是子父类)的
重写和重载的区别?
        重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
        重写:在不同类中(子父类中)。方法声明相同(返回类型,方法名,参数列表均相同)。
[Java] 纯文本查看 复制代码
class People {
        void eat() {
                System.out.println("吃饭.....");
        }
}

class Man extends People {
        // 重写
        public void eat() {
                System.out.println("喝酒....");
        }

        // 重载
        void eat(String str) {
                System.out.println("吃" + str + "....");
        }
}

public class Demo {

        public static void main(String[] args) {
                Man man = new Man();
                man.eat();
                man.eat("牛肉");
        }
}

运行结果:

  • final关键字
final修饰特点
    1,final修饰的类是一个最终类,不能在派生子类。
    2,final修饰的方法是最终方法,不可以给重写。
    3,final修饰的变量是一个常量,只能被赋值一次。 被final修饰的常量名所有的字母都是大写的。如果由多个单词组成单词间通过 _ 连接。
    4,可以通过构造代码块或者构造函数赋值一次。
    * 基本类型,是值不能被改变
    * 引用类型,是地址值不能被改变,对象中的属性可以改变




点评

有些东西笔记没有写到  发表于 2018-1-30 19:21

24 个回复

倒序浏览
回复 使用道具 举报
小鲁哥哥又出新教程!!!赞
回复 使用道具 举报
详细 收藏了 谢谢
回复 使用道具 举报
黑马加油!!
回复 使用道具 举报
不错,就是有点太简单了
回复 使用道具 举报
写的还可以,不错
回复 使用道具 举报
好贴收藏
回复 使用道具 举报
总结的很好,对小黑马们应该很有帮助
回复 使用道具 举报
又出新教程了
回复 使用道具 举报
yw540 中级黑马 2016-8-17 23:19:33
11#
很全 很详细 收藏了 谢谢
回复 使用道具 举报
收藏了,谢谢!!!!!!!
回复 使用道具 举报
写的好棒
回复 使用道具 举报
加油加油加油
回复 使用道具 举报
很全 很详细 收藏了 谢谢
回复 使用道具 举报
写的太好了,一定要收藏
回复 使用道具 举报
不错不错,应该有掌声
回复 使用道具 举报
x55555lg 来自手机 中级黑马 2016-8-20 22:35:38
18#
顶一个,支持下
回复 使用道具 举报
不错,很好
回复 使用道具 举报
学无止境!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马