JAVA入门2

Wesley13
• 阅读 628

课程地址:https://www.imooc.com/learn/124

powerDesign-uml下载地址:http://www.uml.org.cn/UMLTools/powerDesigner/powerDesignerToolIntroduction.htm

一、类和对象

1.1对象

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

1.2定义java中的类

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

定义类的首字母要大写

JAVA入门2

JAVA入门2

1.3使用java的对象

JAVA入门2

JAVA入门2

经常把属性称为实例变量

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

默认值是0

JAVA入门2

JAVA入门2

JAVA入门2

1.4成员变量,局部变量

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

成员变量

JAVA入门2

JAVA入门2

调用成员变量

JAVA入门2

局部变量只能在内部使用

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

1.5java中的构造法方法

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

1.6Java 中的 static 使用之静态变量

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!

Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~

使用 static 可以修饰变量、方法和代码块。

本小节,我们先认识一下静态变量。

例如,我们在类中定义了一个 静态变量 hobby ,操作代码如下所示:

JAVA入门2

运行结果:JAVA入门2

要注意哦:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~

1.7Java 中的 static 使用之静态方法

与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:

JAVA入门2

运行结果:JAVA入门2

需要注意:

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

JAVA入门2

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

JAVA入门2

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

JAVA入门2

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:

JAVA入门2

public class HelloWorld {
    
    // 定义静态变量score1
    static int score1 = 86;
    // 定义静态变量score2
    static           int score2 = 92; 

    // 定义静态方法sum,计算成绩总分,并返回总分
    public static    int sum() { 
      
      return score1+score2;
      
    }

    public static void main(String[] args) {
        
        // 调用静态方法sum并接收返回值
        int allScore =HelloWorld.sum();
        
        System.out.println("总分:" + allScore);
    }
}

1.8static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如:

JAVA入门2

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

我们来看一段代码:

JAVA入门2

运行结果:

JAVA入门2

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

二、封装

2.1面向对象特性-封装

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

设为私有属性

JAVA入门2

发现不能调用

JAVA入门2

get和set方法

JAVA入门2

使用

2.2使用包管理java中的类

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

2.3访问修饰符

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

2.4this关键字

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

类里面自动创建get,set方法

JAVA入门2

调用方法

2.5java中的内部类

定义:

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便、

分类:

  • 成员内部类

  • 静态内部类

  • 方法内部类

  • 匿名内部类

    //外部类HelloWorld public class HelloWorld {

    // 内部类Inner,类Inner在类HelloWorld的内部
    public class Inner {
        
        // 内部类的方法
        public void show() {
            System.out.println("welcome to imooc!");
        }
    }
    
    public static void main(String[] args) {
        
        // 创建外部类对象
        HelloWorld hello = new HelloWorld();
        // 创建内部类对象
        Inner i = hello.new Inner();
        // 调用内部类对象的方法
        i.show();
    }
    

    }

(1)成员内部类:

内部类中最常见的就是成员内部类,也称为普通内部类。我们来看如下代码:

JAVA入门2

运行结果为:JAVA入门2

从上面的代码中我们可以看到,成员内部类的使用方法

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

4、 编译上面的程序后,会发现产生了两个 .class 文件

JAVA入门2

其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class

另外,友情提示哦:

1、 外部类是不能直接使用内部类的成员和方法滴

JAVA入门2

可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如:

JAVA入门2

运行结果:JAVA入门2

//外部类HelloWorld
public class HelloWorld{
    
    //外部类的私有属性name
    private String name = "imooc";
    
    //外部类的成员属性
    int age = 20;
    
    //成员内部类Inner
    public class Inner {
        String name = "爱慕课";
        //内部类中的方法
        public void show() { 
            System.out.println("外部类中的name:" +  HelloWorld.this.name                );
            System.out.println("内部类中的name:" +  name                );
            System.out.println("外部类中的age:" + age);
        }
    }
    
    //测试成员内部类
    public static void main(String[] args) {
        
        //创建外部类的对象
        HelloWorld o = new HelloWorld (); 
        
        //创建内部类的对象
        Inner inn = o.new Inner();             ;
        
        //调用内部类对象的show方法
        inn.show();
    }
}

(2)静态内部类

特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

JAVA入门2

运行结果 : JAVA入门2

//外部类
public class HelloWorld {
    
    // 外部类中的静态变量score
    private static int score = 84;
    
    // 创建静态内部类
    public  static        class SInner {
        // 内部类中的变量score
        int score = 91;
        
        public void show() {
            System.out.println("访问外部类中的score:" +  HelloWorld.score          );
            System.out.println("访问内部类中的score:" + score);
        }
    }

    // 测试静态内部类
    public static void main(String[] args) {
        // 直接创建内部类的对象
        SInner si=new SInner();
        
        
        // 调用show方法
        si.show();
    }
}

(3)方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

JAVA入门2

一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

//外部类
public class HelloWorld {
    
    private String name = "爱慕课";
    
    // 外部类中的show方法
    public void show() { 
        // 定义方法内部类
        class MInner {
            int score = 83;
            public int getScore() {
                return score + 10;
            }
        }
        
        // 创建方法内部类的对象
        MInner mi= new MInner();
        
        // 调用内部类的方法
        int newScore=mi.getScore();
        
        System.out.println("姓名:" + name + "\n加分后的成绩:" + newScore);
    }
    
    // 测试方法内部类
    public static void main(String[] args) {
        
        // 创建外部类的对象
        HelloWorld mo=new HelloWorld();
        
        // 调用外部类的方法
        mo.show();
    }
}

三、继承

3.1java中的继承

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

父类写好

JAVA入门2

JAVA入门2

JAVA入门2

创建子类,并建立关系

JAVA入门2

创建测试类

JAVA入门2

JAVA入门2

3.2java中的方法重写

JAVA入门2

JAVA入门2

测试调用

JAVA入门2

JAVA入门2

3.3继承初始化顺序

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

先执行父类的构造方法,再执行子类的构造方法

JAVA入门2

JAVA入门2

JAVA入门2

10被20覆盖了,属性的初始化是先执行的,然后执行构造方法

JAVA入门2

3.4final关键字

JAVA入门2

(1)final修饰类

JAVA入门2

JAVA入门2

子类会报错

(2)final修饰方法

JAVA入门2

JAVA入门2

子类方法不允许覆盖或重写

(3)final修饰属性

JAVA入门2

JAVA入门2

子类属性报错

JAVA入门2

final关键字修饰属性,系统不会自动初始化

(4)final修饰变量

JAVA入门2

不允许修改变量

3.5super的使用

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

main里调用属性

JAVA入门2

main调用父类方法

JAVA入门2

main调用子类方法

JAVA入门2

JAVA入门2

父类无参的构造方法

JAVA入门2

子类的无参构造方法,隐式的显示

JAVA入门2

JAVA入门2

会自动执行父类构造方法

JAVA入门2

JAVA入门2

JAVA入门2

此时不是第一行,构造方法就不可以了

JAVA入门2

JAVA入门2

注意报错

JAVA入门2

子类没有显示调用父类的构造方法

JAVA入门2

父类定义一个有参的构造方法

JAVA入门2

报错

JAVA入门2

3.6java中的object类

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

包名+地址

JAVA入门2

eclipse自带根据对象属性生成自带toString方法

JAVA入门2

JAVA入门2

JAVA入门2

执行main后生成

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

即使是两个对象的属性值一样,也是不同的地址

类似于==判断

JAVA入门2

JAVA入门2

eclipse提供了生成equals的方法

JAVA入门2

JAVA入门2

删除hash方法

JAVA入门2

分析

JAVA入门2

JAVA入门2

JAVA入门2

四、多态

4.1java中的多态

JAVA入门2

JAVA入门2

创建工程,默认选项

JAVA入门2

创建父类

JAVA入门2

创建子类

JAVA入门2

创建测试类

JAVA入门2

引用的多种形态

JAVA入门2

不能子类引用指向父类

JAVA入门2

JAVA入门2

父类写方法

JAVA入门2

子类重写方法

JAVA入门2

obj1()调用的是父类方法

JAVA入门2

obj2()调用的是子类方法

JAVA入门2

创建cat类,继承animal类

JAVA入门2

cat里不重写创建方法

JAVA入门2

子类继承父类的方法

JAVA入门2

子类独有地方法

JAVA入门2

main中不能通过继承调用子类独有的方法

JAVA入门2

JAVA入门2

练习

4.2多态中引用类型的转换

JAVA入门2

JAVA入门2

JAVA入门2

子类转换成父类

JAVA入门2

父类到子类,不允许

JAVA入门2

强制转换

JAVA入门2

强制转换存在风险,虽然编译器不保存,但是运行会报错

如何避免强制转换风险的问题呢?

使用:instanceof关键字

JAVA入门2

JAVA入门2

4.3java中的抽象类

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

定义父类为抽象类

JAVA入门2

JAVA入门2

JAVA入门2

定义子类,早年电话,继承父类

JAVA入门2

JAVA入门2

创建子类,智能电话

JAVA入门2

JAVA入门2

创建测试类

JAVA入门2

JAVA入门2

JAVA入门2

4.5java中的接口

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

extends关键字和implements关键字是不能调换的

JAVA入门2

JAVA入门2

JAVA入门2

通常在给接口命名的时候前面会加上一个大写的‘i’字母,用来区分和普通的类名不同

JAVA入门2

声明接口的时候,省略掉了abstract关键字

JAVA入门2

声明接口里的方法时,也省略了abstract关键字

JAVA入门2

通常abstract关键字是不写的

JAVA入门2

书写接口

JAVA入门2

接口的创建

JAVA入门2

创建psp类,继承玩游戏

JAVA入门2

用接口来描述

JAVA入门2

接口的使用

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

内部类使用后,注意分号结束,通过接口调用

JAVA入门2

JAVA入门2

通过new和.直接调用

JAVA入门2

说明:在安卓开发和高级框架开发中,经常会使用匿名内部类的方式来使用接口

4.6UML简介

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

按住鼠标左键进行连线

JAVA入门2

JAVA入门2

选择继承关系

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

接口定义好

JAVA入门2

实现关系是虚线,继承关系是实线

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

修改父类返回值

JAVA入门2

子类自动修改

JAVA入门2

根据图像生成java语言

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

和以前做对比

JAVA入门2

改写统一名称方法,重新生成java

五、阶段练习

JAVA入门2

JAVA入门2

建立父类

JAVA入门2

JAVA入门2

创建子类

JAVA入门2

JAVA入门2

JAVA入门2

继承关系

JAVA入门2

多态关系

JAVA入门2

JAVA入门2

新建抽象类

JAVA入门2

子类继承抽象类

JAVA入门2

效果一样,但是更合理

六、综合练习

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

JAVA入门2

分析同学案例:

JAVA入门2

JAVA入门2

右边更合理,不同类型的车用不同类

JAVA入门2

使用继承关系

JAVA入门2

使用多态

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这