Java 基础学习-内部类&API

Java 基础学习

第十一章 内部类&API


相信坚持不懈,相信每日进步一点点,相信你也可以!!!加油。


前言

毕业到工作,没有系统的对知识进行过整理与记录,许多知识认识自己,自己却感到陌生了,学而不思则罔,所以还是决定对知识进行一个系统化的整理。


提示:以下是本篇文章正文内容

一、 参数传递

1.类名作为形参和返回值

  1. 类名作为方法的形参
    a. 方法的形参是类名,其实需要的是该类的对象
    b. 实际传递的是该对象的【地址值】
  2. 类名作为方法的返回值
    a. 方法的返回值是类名,其实返回的是该类的对象
    b. 实际传递的,也是该对象的【地址值】
  3. 示例代码:
    class Cat { 
    	public void eat() { 
    		System.out.println("猫吃鱼"); 
    	} 
    }
    class CatOperator { 
    	public void useCat(Cat c) { //Cat c = new Cat(); 
    		c.eat(); 
    	}
    	public Cat getCat() { 
    		Cat c = new Cat(); 
    		return} 
    }
    public class CatDemo { 
    	public static void main(String[] args) { 
    		//创建操作类对象,并调用方法 
    		CatOperator co = new CatOperator(); 
    		Cat c = new Cat(); 
    		co.useCat(c); 
    		Cat c2 = co.getCat(); //new Cat() 
    		c2.eat(); 
    	} 
    }
    

2. 抽象类作为形参和返回值

  1. 抽象类作为形参和返回值
    a. 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
    b. 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
  2. 代码示例
    abstract class Animal { 
    	public abstract void eat(); 
    }
    public class Cat extends Animal { 
    	@Override 
    	public void eat() { 
    		System.out.println("猫吃鱼"); 
    	}
    }
    class AnimalOperator { 
    	public void useAnimal(Animal a) { //Animal a = new Cat(); 
    		a.eat(); 
    	}
    	public Animal getAnimal() { 
    		Animal a = new Cat(); 
    		return} 
    }
    public class AnimalDemo { 
    	public static void main(String[] args) { 
    		//创建操作类对象,并调用方法 
    		AnimalOperator ao = new AnimalOperator(); 
    		Animal a = new Cat(); 
    		ao.useAnimal(a); 
    		Animal a2 = ao.getAnimal(); //new Cat() 
    		a2.eat();
    	} 
    }
    

3. 接口名作为形参和返回值

  1. 接口作为形参和返回值
    a. 方法的形参是接口名,其实需要的是该接口的实现类对象
    b. 方法的返回值是接口名,其实返回的是该接口的实现类对象

  2. 代码示例

    interface Jumpping {
    	void jump();
    }
    class JumppingOperator {
    	public void useJumpping(Jumpping j) { //Jumpping j = new Cat();
    		j .jump ()}
    	public Jumpping getJumpping() {
    		Jumpping j = new Cat();
    		return j;
    	}
    }
    class Cat implements Jumpping {
    	©Override
    	public void jump() {
    		System, out .printin (”猫可以跳高T ")}
    }
    public class JumppingDemo {
    	public static void main(String[] args) {
    		//创建操作类对象,并调用方法
    		JumppingOperator j o = new JumppingOperator();
    		Jumpping j = new Cat ();
    		j o.useJumpping(j);
    		Jumpping j 2 = j o.getJumpping(); //new Cat()
    		j2 . jump ();
    	}
    }
    

二、内部类

1. 内部类的基本使用

  1. 内部类概念
    在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
  2. 内部类定义格式
    /* 格式: 
    class 外部类名{ 
    	修饰符 class 内部类名{ } 
    } */
    class Outer { 
    	public class Inner { } 
    }
    
  3. 内部类的访问特点
    a. 内部类可以直接访问外部类的成员,包括私有
    b. 外部类要访问内部类的成员,必须创建对象
  4. 示例代码:
    public class Outer { 
    	private int num = 10; 
    	public class Inner { 
    		public void show() { 
    			System.out.println(num); 
    		} 
    	}
    	public void method() { 
    		Inner i = new Inner(); 
    		i.show(); 
    	} 
    }
    

2. 成员内部类

  1. 成员内部类的定义位置
    在类中方法,跟成员变量是一个位置
  2. 外界创建成员内部类格式
    a. 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    b. 举例:Outer.Inner oi = new Outer().new Inner();
  3. 成员内部类的推荐使用方案
    将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。

3. 局部内部类

  1. 局部内部类定义位置
    局部内部类是在方法中定义的类
  2. 局部内部类方式方式
    a. 局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
    b. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量

4. 匿名内部类

  1. 匿名内部类的前提
    a. 存在一个类或者接口,这里的类可以是具体类也可以是抽象类
  2. 匿名内部类的格式
    格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
    举例:
    new Inter(){ 
    	@Override public void method(){} 
    }
    
  3. 匿名内部类的本质
    本质:是一个继承了该类或者实现了该接口的子类匿名对象
  4. 匿名内部类直接调用方法
    interface Inter{ 
    	void method(); 
    }
    class Test{ 
    	public static void main(String[] args){ 
    		new Inter(){ 
    			@Override 
    			public void method(){ 
    				System.out.println("我是匿名内部类"); 
    			} 
    		}.method(); // 直接调用方法 
    	} 
    }
    
  5. 匿名内部类在开发中的使用
    a. 当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的 代码
    b. 代码示例:
    interface Jumpping { 
    	void jump(); 
    }
    class Cat implements Jumpping { 
    	@Override 
    	public void jump() { 
    		System.out.println("猫可以跳高了"); 
    	} 
    }
    class Dog implements Jumpping { 
    	@Override public void jump() { 
    		System.out.println("狗可以跳高了"); 
    	} 
    }
    class JumppingOperator { 
    	public void method(Jumpping j) { 
    		//new Cat(); 
    		new Dog(); 
    		j.jump(); 
    	} 
    }
    class JumppingDemo { 
    	public static void main(String[] args) { 
    	//需求:创建接口操作类的对象,调用method方法 
    	JumppingOperator jo = new JumppingOperator();
    	Jumpping j = new Cat(); 
    	jo.method(j); 
    	Jumpping j2 = new Dog(); 
    	jo.method(j2); 
    	System.out.println("­­­­­­­­"); 
    	// 匿名内部类的简化 
    	jo.method(	new Jumpping() { 
    		@Override 
    		public void jump() { 
    			System.out.println("猫可以跳高了"); 
    		} 
    	});
    	// 匿名内部类的简化 
    	jo.method(new Jumpping() { 
    		@Override 
    		public void jump() { 
    			System.out.println("狗可以跳高了"); } 
    		}); 
    	} 
    }
    

三、 常用API

1. Math

  1. Math类概述
    Math 包含执行基本数字运算的方法
  2. Math中方法的调用方式
    Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用
  3. Math类的常用方法
方法名说明
public static int abs(int a)返回参数的绝对值
public static double ceil(double a)返回大于或等于参数的最小double值,等于一个整数
public static double floor(double a)返回小于或等于参数的最大double值,等于一个整 数
public static int round(float a)按照四舍五入返回最接近参数的int
public static int max(int a,int b)返回两个int值中的较大值
public static int min(int a,int b)返回两个int值中的较小值
public static double pow (double a,double b)返回a的b次幂的值
public static double random()返回值为double的正值,[0.0,1.0)

2. System

  1. System类的常用方法
方法名说明
public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
public static long currentTimeMillis()返回当前时间(以毫秒为单位)
  1. 类实现接口用implements表示
    public class 类名 implements 接口名 {}
    
  2. 接口不能实例化
    参照多态的方式,通过实现类对象实例化,这叫接口多态。
    多态的形式:具体类多态,抽象类多态,接口多态。

3. Object类的toString方法

  1. Object类概述
    Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类, 换句话说,该类所具备的方法,所有类都会有一份
  2. toString方法的作用:
    以良好的格式,更方便的展示对象中的属性值

4. Object类的equals方法

  1. equals方法的作用
    a. 用于对象之间的比较,返回true和false的结果
    b. 举例:s1.equals(s2); s1和s2是两个对象
  2. 重写equals方法的场景
    不希望比较对象的地址值,想要结合对象属性进行比较的时候。
  3. 示例代码
class Student { 
	private String name; 
	private int age; 
	public Student() { }
	public Student(String name, int age) { 
		this.name = name; 
		this.age = age; 
	}
	public String getName() { 
		return name; 
	}
	public void setName(String name) { 
		this.name = name; 
	}
	public int getAge() { 
		return age; 
	}
	public void setAge(int age) { 
		this.age = age; 
	}
	@Override 
	public boolean equals(Object o) { 
		if (this == o) return true; 
		if (o == null || getClass() != o.getClass()) return false; 
		Student student = (Student)//student ­­ s2 
		if (age != student.age) return false; 
		return name != null ? name.equals(student.name) : student.name == null; 
	} 
}

添加wx: 15338507382,备注 “java基础”
免费领取Java开发全套学习手册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

眼里有星星☆☆☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值