第八章总结

目录

一、类包

1、类路径

指定包名(package)

2、创建包:

3、导入包

二、内部类

1、成员内部类

2、匿名内部类

一、类包

在Java中,我们可以使用class关键字来进行定义一个类,在程序被编译后就会产生一个.class文件;类的定义是规定类名不能重复的,如果程序内只定义了少量的类,那自然不用担心这个问题;

随着类的数量增多,那么难免会出现这个问题,如果根据需求需要定义两个名字相同但是程序逻辑不同的类时,那么该如何解决呢,最好的方法就是将这个两个类放置在不同的包下面。

1、类路径

如果一个程序内存在多个同名不同包的max类,那么该如何使用指定包的类呢?
在使用该类时使用该类的类路径,也成为绝对路径。
 

java.util.Date date=new java.util.Date();		// 选择Java.util包下的Date类
java.sql.Date date2=new java.sql.Date(100)	// 选择Java.sql包下的Date类

指定包名(package)

在进行创建包的时候需要注意的是,Java包的命名规则建议使用全小写字母进行命名。
需要了解的是如果一个类没有被定义在一个指定的包内,那么该类就被归纳到默认包(default package)中;
在某个包下面创建一个类的话,需要在这个类的开头加上表达式 package 包名,该表达式需要放置在程序的第一行,使用package关键字指定包名之后,包名也会成为类名的一部分,在不同包下使用该类的话,需要使用 import 包名.类名 的格式。

package test;	//指定包名,表示该类在本包内
public class dome{
}

2、创建包:

1.双击eclipse弹出路径对话框,并复制路径

 2.复制路径到文件夹中查找

3.查找后,可以看见在Eclipse里的Java代码,选择一个项目,打开src

 4.新建一个项目,在里面创建一个包,右击选择package;返回文件夹就能看新建的包

 5.同时创建包并在包里创建一个类

 6.创建包,存储域名

7.在创建包存储域名时,把域名一次性打上去

 

3、导入包

在Java中,如果需要使用到其它包内的类的话,除了使用该类的绝对路径之外,我们还可以使用Java中 import 关键字来指定。例如,如果在其它包内也定义了一个Math,那么假如我们只想使用该Math类的话,那么我们可以使用import关键字进行导包。

package test;
 
import Number_5.Math;   //导包,导入其它包内的Math类
 
public class Demo_4 {
    public static void main(String[] args) {
        int max = Math.max(4, 6);	// 进行导包后,再使用时,直接使用包名.类名的方法进行使用
        System.out.println(max);
    }
}

在进行导包后,我们在使用该包下的Math类后,可以看到,java.lang包下有一个Java给定的Math类,还有一个我们刚刚进行导的包下的Math类;

需要注意的是,如果使用import导入某个包下的所有类时,这些类并不包括该包下的子包的类。如果需要使用子包中的类时,需要对子包进行单独引用。

import 包名.子包名.*;	//导入所有类
import 包名.子包名.类名;	//导入指定类

导入静态方法或静态成员

使用import关键字还可以对静态方法与静态变量进行导包。

import java.lang.max;
import java.lang.System.out;
 
public class Demo{
	public static void main(String[] args){
		out.println("较大值为:"+(max(1,4)));	// 导入后可直接使用
	}
}

二、内部类

内部类就定义在一个类内部的类;

1、成员内部类

定义在一个类成员位置的内部类,称为成员内部类,在成员内部类中可以使用外部类的的任意成员变量与成员方法,即使该外部类成员变量被private所修饰。

class OuteruClass{    //外部类
 
class InnerClass{     //内部类
    }
 
}

 例题代码:                               

 
public class Car {         //创建汽车类
	//成员变量
	private String brand;          //汽车品牌
	public Car(String brand) {     //汽车类的构造方法,参数为汽车品牌
		this.brand = brand;        //给汽车品牌赋值
	}
	//成员内部类
	class Engine{       //发动机类(内部类)
		//成员变量
		String model;       //发动机型号
		//构造方法
		public Engine(String  model) {       //发动机类的构造方法,参数为发动机型号
			this.model = model;           //给发动机型号赋值
		}
		//成员方法
		public void ignite() {              //(发动机)点火方式
			System.out.println("发动机"+this.model+"点火");
		}
	}
	public void start() {         //启动(汽车)方法
		System.out.println("启动"+this.brand);
	}
	public static void main(String[]args) {
		Car car =new Car("大众郎行");
		car.start();
		Car.Engine engine = car.new Engine("EA211");
		engine.ignite();
	}
}

运行结果:

 

 

成员内部类不止可以 在外部类使用,在其他类中也可以使用。在其他类中创建内部类的对象语法特殊;语法如下: 

外部类 outer = new 外部类()
外部类.内部类 inner = outer.new 内部类();

使用this关键字获取内部类与外部类的引用

public class TheSameName {
		private int x =7;       //外部类的x
		private class inner{
			private int x =9;  //内部类的x
			public void doit() {
				int x = 11;     //局部变量x
				x++;            //调用局部变量
				this.x++;        //调用内部类的x
				TheSameName.this.x++;   //调用外部类的x
			}
		}
}

2、匿名内部类

匿名内部类本质是一个隐藏了名字的内部类。匿名类是只有在创建时才会编写类体的一种写法。

语法格式:

new 继承/实现(){
	//重写的方法
};

匿名类的特点:现用现写;

匿名内部类在一对大括号 { } 的范围内是一个类,整体却是一个new出来的对象。

例题代码:

abstract class Dog{
	String Color;
	public abstract void move();
	public abstract void call();
}
 
public class Demo {
	public static void main(String args[]) {
		Dog maomao = new Dog() {
			public void move() {
				System.out.println("四腿狂奔");
			}
			public void call() {
				System.out.println("嗷呜~");
			}
		};
		maomao.Color = "灰色";
		maomao.move();
		maomao.call();
	}
 
}

   运行结果:   

使用匿名类时应该遵循以下几点原则:

1、匿名类不能写构造方法。

2、匿名类不能定义静态的成员。

3、如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被java虚拟机销毁。

说明:匿名内部类编译以后,会产生以“外部类名$序号”为名称的.class文件,序号以1~n排列,分别代表1~n个匿名内部类。

                                                                                       

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值