Java两周半速成之路(第八天)

本文详细解释了Java中的形式参数和返回值类型,包括基本类型和引用类型(类、抽象类、接口)的处理规则。此外,文章还介绍了包的概念、包的划分、类的修饰符、成员内部类、局部内部类以及匿名内部类的使用。
摘要由CSDN通过智能技术生成

一.形式参数和返回值问题

1.形式参数:

基本类型: byte,short,int,long,float,double,boolean,char

引用类型:类,抽象类,接口

1.1     类:当一个类作为方法参数类型传递的时候,将来调用时应该传入该的类对象

演示:

package com.shujia.day09;
/*
    形式参数
        基本类型: byte,short,int,long,float,double,boolean,char
        引用类型:
            类:当一个类作为方法参数类型传递的时候,将来调用时应该传入该的类对象
            抽象类:
            接口:

 */

public class Student1 {
    public void show(){
        System.out.println("断桥是否下过雪");
    }
}
class Demo1{
    public void fun(Student1 s1){
        s1.show();
    }
}

class Test1{
    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
        Student1 s1 = new Student1();
        demo1.fun(s1);

    }
}

1.2       抽象类:当你看到一个抽象类作为方法形式参数类型的时候,将来调用时,应该传入该抽象类的具体子类的对象 

演示:

/*
    形式参数
        基本类型: byte,short,int,long,float,double,boolean,char
        引用类型:
            类:当一个类作为方法参数类型传递的时候,将来调用时应该传入该的类对象
            抽象类:当你看到一个抽象类作为方法形式参数类型的时候,将来调用时,应该传入该抽象类的具体子类的对象
            接口:

 */

abstract class Demo2 {

    abstract void print1();

    public void show() {
        System.out.println("桃花岛屿之间");
    }
}

class DemoZi extends Demo2 {
    @Override
    void print1() {
        System.out.println("输出:许嵩");
    }
}

public class Student2 {
    public void fun2(Demo2 d2) {           // Demo2 d2 = new DempZi    抽象多态
        d2.show();
    }
}

class Test {
    public static void main(String[] args) {
        Student2 s2 = new Student2();
        DemoZi demoZi = new DemoZi();
        s2.fun2(demoZi);

    }
}

1.3 接口:当你看到一个接口作为方法形式参数类型的时候,将来调用该方法时,应该传入实现该接口的具体子类对象

演示:

/*
    形式参数
        基本类型: byte,short,int,long,float,double,boolean,char
        引用类型:
            类:当一个类作为方法参数类型传递的时候,将来调用时应该传入该的类对象
            抽象类:当你看到一个抽象类作为方法形式参数类型的时候,将来调用时,应该传入该抽象类的具体子类的对象
            接口:当你看到一个接口作为方法形式参数类型的时候,将来调用该方法时,应该传入实现该接口的具体子类对象
 */

interface JieKou1{
    public void print1();
}


class Demo3{
    public void show(JieKou1 j1){   //JieKou j1 = new Demo4();         //接口多态
        j1.print1();
    }
}

class Demo4 implements JieKou1{
    @Override
  public void print1(){
      System.out.println("许嵩");
  }
}

public class Student3 {
    public static void main(String[] args) {
        Demo3 demo3 = new Demo3();
        demo3.show(new Demo4());

    }
}

 2.返回值类型

返回值类型:

                基本类型:  byte,short,int,long,float,double,boolean,char

                引用类型:类,抽象类,接口

2.1类:当你看到一个类作为方法的返回值类型的时候,将来方法内部定义时应该返回该类的对象

演示:


/*
    返回值类型
        基本类型: byte,short,int,long,float,double,boolean,char
        引用类型:
            类:当你看到一个类作为方法的返回值类型的时候,将来方法内部定义时应该返回该类的对象
            抽象类:
            接口:

 */

class TeacherDemo1{
    public void fun1(){
        System.out.println("雅俗共赏");
    }
}

class TeacherDemo2{
    public TeacherDemo1 show(){   //类:当你看到一个类作为方法的返回值类型的时候,将来方法内部定义时应该返回该类的对象
     return new TeacherDemo1();
    }
}

public class Teacher1 {
    public static void main(String[] args) {
        TeacherDemo2 t2 = new TeacherDemo2();
        t2.show().fun1();             //t2.show返回的是一个TeacherDemo1对象,之后调用fun()方法
    }
}

 2.2抽象类:当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部定义时应该返回该抽象类具体子类对象

演示:


/*
    返回值类型
        基本类型: 跳过
        引用类型:
            类:当你看到一个类作为方法的返回值类型的时候,将来方法内部定义时应该返回该类的对象
            抽象类:当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部定义时应该返回该抽象类具体子类对象
            接口:

 */

 abstract class TeacherDemo3 {
    public void print() {
        System.out.println("许嵩");
    }
}

class TeacherDemo3Zi extends TeacherDemo3 {

}

class TeacherDemo4 {
    public TeacherDemo3 show() {
        return new TeacherDemo3Zi();
    }
}
public class Teacher2 {
    public static void main(String[] args) {
        TeacherDemo4 t4 = new TeacherDemo4();   //第一种
        t4.show().print();
        TeacherDemo3 tt3 = t4.show();          //第二种
        tt3.print();

    }
}

 3.3       接口:当你看到一个接口作为方法的返回值类型的时候,将来方法内部定义时应该返回实现该接口的具体子类对象

/*
    返回值类型
        基本类型: 跳过
        引用类型:
            类:当你看到一个类作为方法的返回值类型的时候,将来方法内部定义时应该返回该类的对象
            抽象类:当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部定义时应该返回该抽象类具体子类对象
            接口:当你看到一个接口作为方法的返回值类型的时候,将来方法内部定义时应该返回实现该接口的具体子类对象
 */

interface JieKou2{
    void jiSuan();
}


class JieKOuTmpl implements JieKou2 {
    @Override
    public void jiSuan() {
        System.out.println("计算");
    }
    
}

class Teacher3Demo{
    public JieKou2 show(){
        return new JieKOuTmpl() ;
    }
}

class Test2{
    public static void main(String[] args) {
        Teacher3Demo t3 = new Teacher3Demo();
        JieKou2 j2 = t3.show();
        j2.jiSuan();



    }
}

二.包

1.包:其实就是文件夹

2.作用:  

(1)方便管理查找对应的文件
(2)让工程与工程之间的关系更加清晰,将来修改的时候方便一些

3.包的划分:

一般情况下,包会按照两种类型进行划分:
(1)按照角色划分
(2)按照功能划分

举例:

基于ssm的xxxx管理系统
老师(增删改查)
学生(增删改查)

一般情况下,包的划分是不会频繁更新的
1、按照角色划分
    老师(包)
        增加.java
        删除.java
        修改.java
        查询.java
    学生(包)
        增加.java
        删除.java
        修改.java
        查询.java

2、按照功能划分
    增(包)
        老师增加.java
        学生增加.java
    删(包)
        老师删除.java
        学生删除.java
    改(包)
        老师修改.java
        学生修改.java
    查(包)
        老师查询.java
        学生查询.java

3.SpringBoot结构:(面试题)
    --Controller     主要是前端与后端的交互层
    --entity(pojo)   实体类层
    --dao            数据库操作接口层
    --service        实现类接口层
        --serviceImpl
    --utils          工具类层

4.定义包的格式:

                            package 包名;            (多级包用.分开即可)

注意事项: package语句必须是程序的第一条可执行的代码

                   package语句在一个java文件中只能有一个

                   如果没有package,默认表示无包名

 5.导包

格式:import 包名;

注意: 这种方式导入是到类的名称。 虽然可以最后写*(表示导入一个包下所有的类),但是不建议。

6.权限修饰符

 三.类及其组成可以用的修饰符

四种权限修饰符:public,protected,默认的,private

四. 内部类

1.概述:

                 把类定义在其他类的内部,这个类就被称为内部类。

2. 分类:

成员内部类:在类中方法外定义的类,叫做成员内部类

局部内部类:在方法内部定义的类,叫做局部内部类

3.创建成员内部类对象的语法:

成员内部类(非静态):

                         外部类名.内部类名  对象名 = new  外部类名().new 内部类名();

演示:



class Outer1 {
    //成员变量
    private int a = 10;

    //成员内部类
    class Inner1 {
        public void show() {
            System.out.println(a);  //在成员内部类可以获取成员变量
        }
    }
}

public class InnerDemo1 {
    public static void main(String[] args) {
        Outer1.Inner1 oi1 = new Outer1().new Inner1();  //创建内部类对象
        oi1.show();
    }
}

3.注意:

1、成员内部类(非静态)既可以访问外部类的中的成员变量,也可以是私有的成员变量

2、内部类都不会单独编译出一个class文件

3.成员内部类可以使用private关键字和static关键字进行修饰,如果内部类被privata修饰,则其他类中无法创建内部类的对象了

演示:

/*
 成员内部类可以使用private关键字和static关键字进行修饰
 */

class Outer2 {

    //如果内部类被privata修饰,则其他类中无法创建内部类的对象了
    private class Inner2 {
        public void fun1() {
            System.out.println("庐州月光");
        }
    }
    public void show(){
        //创建成员内部类
        Inner2 inner2 = new Inner2();
        inner2.fun1();
    }
}

public class InnerDemo2 {
    public static void main(String[] args) {
        Outer2 outer2 = new Outer2();
        outer2.show();
    }
}

4. 创建静态的成员内部类的对象语法:

                       外部类名.内部类名 对象名 = new 外部类名.内部类名();

演示:

/*
创建静态的成员内部类的对象语法:
           外部类名.内部类名 对象名 = new 外部类名.内部类名();
 */

class Outer3 {


    static class Inner3 {         //class Inner3
        public void show() {
            System.out.println("千百度");
        }
    }

    public void fun() {
        Inner3 inner3 = new Inner3();
        inner3.show();
    }
}

public class InnerDemo3 {
    public static void main(String[] args) {

        //当内部类为静态
        //  创建静态的成员内部类的对象语法:
        //  外部类名.内部类名 对象名 = new 外部类名.内部类名();
        Outer3.Inner3 oi3 = new Outer3.Inner3();
        oi3.show();
//       new Outer3.Inner3().show();
//
    }
}

 5.局部内部类:将类定义在类中方法的内部

演示:

package com.shujia.day09.InnerClass;

/*
    局部内部类:将类定义在类中方法的内部

 */
class Outer4 {
    int a = 80;

    public void fun1() {
        //局部变量
        int a = 10;

        //在这里定义的类,叫做局部内部类
        class Inner4 {

            public void show() {
//                a = 40;  //   在JDK1.8之后,方法中的局部变量在内部中无法修改
                System.out.println(a);
                System.out.println("孤芳自赏");
            }
        }
        Inner4 inner4 = new Inner4();
        inner4.show();
    }

}

public class InnerDemo4 {
    public static void main(String[] args) {
        Outer4 outer4 = new Outer4();
        outer4.fun1();
    }
}

 五.匿名内部类

1.匿名内部类的语法定义格式:

                  Xxx xx =  new  类名/抽象类名/接口(){  重写方法;  }

演示:


abstract class Demo1{
    abstract void show();
}

//class Demo1Zi extends Demo1{
//    @Override
//    void show() {
//        System.out.println("我乐意");
//    }
//}
class Demo2{
    public void fun1(Demo1 demo1){
        demo1.show();
    }
}
public class NiminDemo2 {
    public static void main(String[] args) {
        Demo2 demo2 = new Demo2();
        demo2.fun1(new Demo1() {          //匿名内部类
            @Override
            void show() {
                System.out.println("年少初遇");
            }
        });
//        demo2.fun1(new Demo1Zi());
    }
}

匿名内部类的练习:

按照要求,补齐代码:

   interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
    public static void main(String[] args) {
          Outer.method().show();
      }
}

要求在控制台输出”HelloWorld”

第一种(不用匿名内部类):

/*
    interface Inter { void show(); }
	class Outer { //补齐代码 }
	class OuterDemo {
	    public static void main(String[] args) {
		      Outer.method().show();
		  }
	}

	要求在控制台输出”HelloWorld”

 */
interface Inter {
    void show();
}

class InterTmpl implements Inter {
    public void show() {
        System.out.println("hello world");
    }
}

class Outer {
    public static Inter method() {
        return new InterTmpl();           //当你看到一个接口作为方法的返回值类型的时候,方法内部返回的是实现了该接口的具体子类对象
    }
}

public class NiMIngTest {
    public static void main(String[] args) {
        //分析:
        //1、发现method()直接可以通过Outer5类名的方式进行调用,说明method()是静态的
        //2、发现调用完method()之后,可以继续调用show方法,而show方法在接口中,说明method()调用完毕之后返回的是Inter类型的对象
        Outer.method().show();
    }
}

第二种(使用匿名内部类):

/*
    interface Inter { void show(); }
	class Outer { //补齐代码 }
	class OuterDemo {
	    public static void main(String[] args) {
		      Outer.method().show();
		  }
	}

	要求在控制台输出”HelloWorld”

 */

//使用 匿名内部类改写
interface Inter1 {
    void show();
}

class Outer1 {
    public static Inter1 methond() {
        return new Inter1() {
            public void show() {
                System.out.println("hello world");
            }
        };
    }
}


public class NiMingTest2 {
    public static void main(String[] args) {
        Outer.method().show();

    }
}

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值