Java学习:从入门到精通week2

本文详细介绍了Java中的类与对象概念、封装原则与实现、构造方法、String类特性、static关键字、数组与Math类,以及继承、super与this的用法,涉及抽象类和接口,展示多态性和final、权限与内部类。

目录

一.类与对象、封装、构造方法

1.1.类与对象

1.2特点

类与对象的关系

1.3类的定义

1.4对象的使用 

 1.5对象内存图

 1.6成员变量和局部变量区别

2.封装 

2.1概述

2.2封装的步骤

2.3封装的操作——private关键字

2.4封装优化1——this关键字 

​ 2.5封装优化2——构造方法

 2.6标准代码——JavaBean

二.String类、static关键字、Arrays类、Math类

1.String类

1.1概述

​ 1.2构造方法

1.3字符串常量池

1.4字符串的相关比较

 1.5字符串获取方法

​ 1.6字符串截取方法 ​

1.7字符串的转换方法

 2.static关键字

2.1概述

2.2定义和使用格式

类变量

静态方法

调用格式

 2.3静态原理图解

 2.4静态代码块

 执行结果

 3.数组工具类Arrays

4.Mayh类

 // 四舍五入

 三.继承、super、this、抽象类

1.继承

1.1概述

定义

好处

1.2继承的格式

 1.3继承后的特点——成员变量

成员方法重名——重写(Override)

1.5继承后的特点——构造方法 

 1.6super和this

 super和this的使用

1.7继承的特点 

2.抽象类

四.接口,多态

1.接口

1.1,格式  

1.2接口的抽象方法

1.3接口的使用

1.4接口默认方法

1.5静态方法

 1.6私有方法

 1.7.接口中常量的定义

1.8继承父类并实现多个接口

1.9接口之间的多继承

2.多态 

2.1代码中实现多态性,其实就是一句话,父类引用指向子类对象

2.2格式

2.2多态成员变量的使用

2.3编译看左边,运行看右边

2.4多态的好处

 2.5对象的上转型

2.6对象的向下转型 

2.7instanceof进行类型判断

五.final、权限、内部类

1.final

1.1final作修饰符修饰类

1.2final修饰方法 

 1.3final作局部变量

1.4final修饰成员变量 

2.权限

2.1四种权限修饰符

3.内部类

成员内部类:

3..1内部类的使用

3.2内部类成员变量的访问

 局部内部类:

4.1局部内部类

 4.2局部内部类的使用

5.匿名内部类

5.1定义和格式

 5.2使用

  匿名内部类总结

7.接口作成员对象类型

8.接口作为方法参数和返回值类型 


一.类与对象、封装、构造方法

1.1.类与对象

面向对象思想概述概述Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

1.2特点

面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装、继承和多态。

类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。现实中,描述一类事物:

属性:就是该事物的状态信息。行为:就是该事物能够做什么。

对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。现实中,一类事物的一个实例:一只小猫。

举例:一只小猫。属性:tom、5kg、2years、yellow。行为:溜墙根走、蹦跶的跑、喵喵叫。

类与对象的关系

类是对一类事物的描述,是抽象的。对象是一类事物的实例,是具体的。

类是对象的模板,对象是类的实体。

1.3类的定义

事物与类的对比

现实世界的一类事物:属性:事物的状态信息。行为:事物能够做什么。Java中用class描述事物也是如此:成员变量:对应事物的属性成员方法:对应事物的行为。

 

1.4对象的使用 

 

 1.5对象内存图

1)一个对象,调用一个方法内存图

 2)两个对象,调用同一方法内存图

3)一个引用,作为参数传递到方法中内存图

 1.6成员变量和局部变量区别

 

2.封装 

2.1概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

2.2封装的步骤

1.使用private关键字来修饰成员变量。

2.对需要访问的成员变量,提供对应的一对getXxx方法、setXxx方法

2.3封装的操作——private关键字

private的含义

1.private是一个权限修饰符,代表最小权限。

2.可以修饰成员变量和成员方法。3.被private修饰后的成员变量和成员方法,只在本类中才能访问。

2.4封装优化1——this关键字 

 2.5封装优化2——构造方法

当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。

 

 2.6标准代码——JavaBean

javaBean是Java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的set和get方法。

 

在写完我们需要的成员变量后,再补齐后面的构造方法以及 settergetter是非常麻烦的,所以可以用一下方法解决:

1.点击左上角的Code键,选择里面的Generate

 2.根据需要点击对应的选项即可,如第一个是构造方法

二.String类、static关键字、Arrays类、Math类

1.String类

1.1概述

 1.2构造方法

 注意:只要带上双引号,就是字符串对象。

在编辑页面按住ctrl在点击需要查看的内容可以查看源代码。

1.3字符串常量池

 通过new创建的字符串不在字符串常量池里面,故为false。

1.4字符串的相关比较

在进行“==”比较字符串是使用的是地址,如果需要对字符串的内容进行比较可以使用一下方法。

1.a.equals(b)

只有当a,b为相同内容的字符串时才会返回true。

 

 

2. a.equalsIgnore(b),不区分大小写(英文字母)

 1.5字符串获取方法

 

 1.6字符串截取方法
 

 

 变的不是字符串,而是地址值,在内存中的字符串已经存在。

1.7字符串的转换方法

 

 2.static关键字

2.1概述

关于static关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用了。

2.2定义和使用格式

类变量

当static修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

类变量:使用static关键字修饰的成员变量。

 比如说,基础班新班开班,学员报到。现在想为每一位新来报到的同学编学号(sid),从第一名同学开始,sid为1,以此类推。学号必须是唯一的,连续的,并且与班级的人数相符,这样以便知道,要分配给下一名新同学的学号是多少。这样我们就需要一个变量,与单独的每一个学生对象无关,而是与整个班级同学数量有关。所以,我们可以这样定义一个静态变量numberOfStudent

代码如下

 

 

静态方法

当static修饰成员方法时,该方法称为类方法。静态方法在声明中有static,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。

类方法:使用static关键字修饰的成员方法,习惯称为静态方法。

 

调用格式

被static修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员,原因即多个对象均属于一个类,共享使用同一个静态成员,但是不建议,会出现警告信息 。

格式如下

 2.3静态原理图解

 2.4静态代码块

 执行结果

说明static代码块只执行一次。

 3.数组工具类Arrays

 

 

 *数组遍历,数组+fori正序排列,数组+forr倒序排列

4.Math类

 

 // 四舍五入

 三.继承、super、this、抽象类

1.继承

1.1概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。

定义

继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

好处

1.提高代码的复用性。2.类与类之间产生了关系,是多态的前提

1.2继承的格式

 1.3继承后的特点——成员变量

如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。

如果子类父类中出现重名的成员变量,这时的访问是有影响的。

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super关键字,修饰父类成员变量,类似于之前学过的this。

 

注意:Fu类中的成员变量是非私有的,子类中可以直接访问。若Fu类中的成员变量私有了,子类是不能直接访问的。通常编码时,我们遵循封装的原则,使用private修饰成员变量,那么如何访问父类的私有成员变量呢?对!可以在父类中提供公共的getXxx方法和setXxx方法。

成员方法重名——重写(Override)

如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写。

方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

 重写的应用:子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。

注意事项

1.子类方法覆盖父类方法,必须要保证权限大于等于父类权限。

2.子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样

1.5继承后的特点——构造方法 

格式和使用

 

 1.6super和this

 

 super和this的使用

访问成员和构造方法

super 父类

this 本类

1.7继承的特点 

1.Java只支持单继承,不支持多继承。

2.Java支持多层继承(继承体系)

2.抽象类

2.1抽象类的基本概念

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明

 继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

 此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法。

抽象类的使用原则如下:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)

四.接口,多态

1.接口:接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK7及以前),默认方法和静态方法(JDK8),私有方法(JDK9)。接口的定义,它与定义类方式相似,但是使用interface关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。

引用数据类型:数组,类,接口。

接口的使用,它不能创建对象,但是可以被实现(implements,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类

1.1,格式  public interface 接口名称{     //接口内容                 }

1.2接口的抽象方法

public abstract interface InterfaceAbstract {
    /*抽象方法
    注意:1.接口中的抽象方法必须满足固定关键字,public abstract
          2.这两个关键字可以省略

     */
     abstract void abs1();
    abstract void abs2();
    public void abs3();
    void abs4();
}

1.3接口的使用

接口不能直接使用,需要用一个”实现类”来“实现”该接口。

public class 实现类名称 implements 接口名称{  ...}

注意:与普通抽象类相似,实现类中必须覆盖重写接口类中的所有抽象类。

public  class InterfaceSon implements InterfaceAbstract {
    @Override
    public void abs1() {
    System.out.println("接口执行");
    }
}

不能直接new接口对象使用,而是要使用它的实现类。

如果实现类本身没有覆盖重写接口类中的所有抽象方法,那么他自身也必须是一个抽象类,与抽象类的抽象子类类似。

1.4接口默认方法

//接口默认方法 格式 public default void 默认方法名称(){...}
public interface InterfaceMoren    {
    public default void de(){
        System.out.println("接口默认方法执行");
        /*接口默认方法可以被实现类覆盖重写
            接口默认方法可以被实现类对象直接调用
         */
    }
    void abs();
}

1.5静态方法

格式   public static void 方法名称(){...}

public interface InterfaceStatic {
    public static void mystatic(){
        System.out.println("静态方法执行");

    }
}
public class InterfaceStatic2{
    public static void main(String[] args) {
        /*注意:不能通过实现类对象的调用使用静态方法,而要通过接口名称调用

         */
        InterfaceStatic.mystatic();
    }
}

 1.6私有方法

 格式 private 返回值类型 方法名称(){..}

静态私有方法 private static 返回值类型 方法名称(){...}

这样的话,只有在接口中才能使用私有类。

 1.7.接口中常量的定义

eg:

public static final int NUM_OUT_PU=1;(接口中的常量必须赋值,且标识符必须使用大写,用下画线分隔开)

(前三个符号可省略)

一旦使用final修饰符,说明数值不能改变。

访问:接口名称.常量表示符,如进行打印与运算等操作。

注意:接口没有静态代码块和构造方法!

1.8继承父类并实现多个接口

一个实现类可同时继承多个接口,这是普通类无法实现的

eg

public class InterfaceManyS implements InterfaceMany1,InterfaceMany2 {
    @Override
    public void inter1() {
        System.out.println("接口一执行");
    }

    @Override
    public void inter2() {
        System.out.println("接口二执行");

    }
}
public class InterfaceManyUse {
    public static void main(String[] args) {
        InterfaceManyS a=new InterfaceManyS();
        a.inter1();//接口一执行
        a.inter2();//接口二执行

        }
    }

若在接口中存在重复的抽象方法,则在实现类中只需要覆盖重写一个抽象方法。

如果在实现类中没有覆盖重写所有抽象方法,则该实现类必须是抽象类。

若多个接口中存在相同的默认方法,

!!! 如果一个实现类既继承父类又继承接口,父类与接口出现重复的方法,父类要优先子类执行。

1.9接口之间的多继承

1)子接口继承多个父接口,需要对其所有抽象方法进行覆盖重写

2)子接口在继承多个父接口时,如果多个父接口存在重复的抽象方法,只需要覆盖重写一个即可

3)如果多个父接口存在重复默认方法,则必须对其进行重写,而且要带着default关键字

2.多态 

2.1代码中实现多态性,其实就是一句话,父类引用指向子类对象

2.2格式

父类名称 对象名=new 子类名称()

或   接口名称 对象名=new 实现类();

2.2多态成员变量的使用

访问:与父类子类相同,对象名称.成员变量,先在子类找,没有的话就向上找,也可通过成员方法间接访问,该方法属于谁则用谁,没有则向上找。

2.3编译看左边,运行看右边

这是成员方法的规则:

public class InterfaceMuitiUse {
    public static void main(String[] args) {
        InterfaceMuitiFu k=new InterfaceMuitiZi();
        k.fu();
        k.method();
        k.zi();//zi()是子类中的方法,编译不通过,因为编译的是父类,子类中的方法(不是覆盖重写)不能使用。
    }
}

2.4多态的好处

实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展性与便利。

 2.5对象的上转型

父类名称 对象名=new 子类名称()

右边创建一个子类对象把他当成子类看待,向上转型一定是安全的:小--->大

2.6对象的向下转型 

 子类名称 对象名=(子类名称)父类对象

将父类对象转型成原来的子类对象

比如已经将一只猫通过多态向上转型为动物,将其再转换为猫的过程就是向下转型,后续便可使用作为猫的子类的特有方法。

如果将猫向上转型成动物,再向下转型成狗,此时编译通过但运行会报错:ClassCastException。

2.7instanceof进行类型判断

五.final、权限、内部类

1.final

1.1final作修饰符修饰类

修饰符 final 返回值类型 方法名(参数列表){...}

1.2final修饰方法 

修饰符 final 返回值类型 方法名 (参数列表){...}

final方法不能被覆盖重写,为最终方法。

 1.3final作局部变量

 eg  int a=1;

        a=2;

a的地址值发生改变,a的值改变,若在方法内使用final定义变量b,用过方法的方式改变了变量的值,则b的值改变,地址不变。

1.4final修饰成员变量 

 注意此处注释掉setter,因为已经在构造方法中对其赋值。

2.权限

2.1四种权限修饰符

3.内部类

将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

 eg 定义外部类 body,内部类heart,他们的class文件名称分别为

body.class

body$heart.class

成员内部类:

3..1内部类的使用

3.2内部类成员变量的访问

无法在内部类的方法中用super直接访问外部类的变量,因为他们不是继承关系。

 局部内部类:

4.1局部内部类

 4.2局部内部类的使用

public class InnerJubu {
    public  void out(){
        //在成员方法内部定义一个内部类,然后通过创建内部类对象用对象访问内部类的方
        //法,在main调用外部类的方法便可以间接使用内部类。
        class inner{
            public void in(){
                System.out.println("局部方法执行");
            }
        }
        inner a=new inner();
        a.in();
    }
}

5.匿名内部类

5.1定义和格式

 5.2使用

1)创建对象使用(匿名内部类,但不匿名对象)

注意事项:匿名内部类在创建对象时只能使用唯一一次,需要再次使用则必须再定义一个匿名                          内 部类,但要多次使用的情况下推荐使用实现类。

2)new 接口名称{......}.成员方法 (匿名内部类同时匿名对象)

 如图写了两个方法,但只能使用其中一个,如果需要再次使用方法,则需要复制再次创建。

  匿名内部类总结

6.类作为成员变量类型

 

!类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象 

7.接口作成员对象类型

 

8.接口作为方法参数和返回值类型 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值