IT十八掌第七天总结(含作业)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IT十八掌第七天总结(含作业)相关的知识,希望对你有一定的参考价值。

IT十八掌第七天总结(含作业)

回顾
--------
对象A 子类 AA 子类AAA
可以使用 A AA AAA 分别来创建新的子类 可以使用任意一个来声明

抽象类和接口
-------------------
   接口中的所有方法都是抽象的
   抽象类可以没有抽象方法
 共
   都不能实例化

 内部类编译后成员位置  
      用“$” 来间隔的
 局部位置
      用数字来间隔
      
匿名内部类对象
------------------------
    将对类的继承,方法重写,对象的创建集成到一行代码中去。
    格式:
        new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
    以*为例

 
 //函数的调用
    Button btn1 = new Button();
   //匿名内部类对象,将类的继承、方法的重写、对象创建一气呵成。
    btn1.addListener(new ButtonListenerAdapter(){   // btn1.addListener 是要调用addListener 方法  该方法是要监听器接口为参数,该监听器为 {} 就相当于继承
        public void onClick(){
	    System.out.println("点击一次");
			}


该方法为定义两个匿名类对象 拜btn1 和 btn2   

方法[1]
***************************************************
写代码的时候要注意 先将符号完善,括号成对写完。
在一条语句的结尾使用 ; 结尾
***************************************************


Button btn1 = new Button();
		//匿名内部类对象,将类的继承、方法的重写、对象创建一气呵成。
		btn1.addListener(new ButtonListenerAdapter(){
			public void onClick(){
				System.out.println("点击一次");
			}
		});

		//创建btn2对象,使用匿名内部类,对onClick(),onDbClick()两个方法给出实现。
		Button btn2 = new Button();
		btn2.addListener(new ButtonListenerAdapter(){
			public void onClick(){
				System.out.println("点击一次");
			}

			public void onDbclick(){
				System.out.println("点击两次");
			}
		});

[方法2]

ButtonListenerAdapter aa = new ButtonListenerAdapter() {
	public void onClick(){
				System.out.println("点击一次");
			}

	public void onDbclick(){
				System.out.println("点击两次");
			}
}; //注意以 ; 结尾


两种方法结果相同 

另外ButtonListenerAdapter -->  ButtonListener (面向对象编程)
即
ButtonListenerAdapter aa = new ButtonListenerAdapter() --> ButtonListener aa = new ButtonListenerAdapter() 

用匿名内部类对象重写土豪征婚

//定义三个 白、富、美
interface  IWhite{   //定义白
    public void  Whiteing (); 
}
interface  IRich{   //定义富
    public void  Riching (); 
}
interface  IBeautiful{   //定义美
    public void  Beautifuling (); 
}
 
//定义一个接口继承白、富、美 三个接口
 
interface WomanStart extends IWhite,IRich,IBeautiful{
 
}
 
//定义土豪类
 
class EarchRicher{                     //
    public void marry(WomanStart MM){
       System.out.println("FIND 白富美 !!");
      }
    }
 
 
class EarchRicherMan { 
    public static void main(String[] args){
     
    WomanStart W = new WomanStart(){   
        public void  Whiteing (){ 
        }
        public void  Riching (){ 
        } 
        public void  Beautifuling (){ 
        }
     
    };
     EarchRicher M =new EarchRicher();
     M.marry(W);
    }
 
}

异常
————————————————————————————————————
   java.lang.throwable
         java.lang.Error
	 java.lang.Exception

异常的体系
Throwable
    Error
	通常出现重大问题如:运行的类不存在或者内存溢出等。
	不编写针对代码对其处理
     Exception 
	在运行时运行出现的一起情况,可以通过try catch finally
Exception和Error的子类名都是以父类名作为后缀

throws用于标识函数暴露出的异常。
throw用于抛出异常对象。
throws与throw的区别:
    thorws用在函数上,后面跟异常类名。
    throw用在函数内,后面跟异常对象。


练习
异常函数声明

class Person{
	private int age;
   //定义函数,声明异常
	public void setAge(int age) throws Exception {  //抛出异常声明
		if (age < 0 || age > 120){
			//抛出异常
			throw new Exception("年龄不合法!!!");   
		}
		this.age =  age ;   // get  set 定义age

       }

    public int getAge(){
		return age;
	}
	
}

class ExceptionDemo{
	public static void main(String[] args){
		Person pe = new Person();
                try{                  //try 尝试  catch 捕捉  对异常进行处理      
			pe.setAge(130); 
		}
		catch(Exception ex){   // catch()捕获哪几种异常
			ex.printStackTrace();  //打印该函数的栈的跟踪信息

		}
	}

}

/**
*运行
*       java.lang.Exception: 年龄不合法!!!
*       at Person.setAge(ExceptionDemo.java:7)
*       at ExceptionDemo.main(ExceptionDemo.java:23)
*
*/

package
--------------------
	包,文件夹。
	java/lang/xxxx
	jar : java archieve,java归档文件。
	java/lang/Object.class
	全称类名,完整类名 : java.lang.Object  java/lang/Object

	编译时指定class文件存放目录使用-d参数:	java -d xx/xxx PackageDemo.java
	
	运行时指定class文件所在目录使用-cp参数:	java -cp xx/xx  A

可见性访问规则
------------------
		修饰符			public		protected		default		private 
		------------------------------------------------------------------
	范围	同类			v			v				v			v
			同包			v			v				v
			子类			v			v
			不同包			v
	
jar
-----------------
	打包java库文件。

	[将类路径下的类打成jar文件]	
		jar cvf myjar.jar -C classes/ .                        //myjar.jar 为自定义的要打包成的文件名
		//classes/是类文件所在文件夹 
		jar cvfe myjar.jar a.a1.a11.a111.A -C classes/ .		//e指定的入口点.  e是含有main函数的类

	[使用java -jar参数来运行程序]
		java -jar myjar.jar							//执行jar文件
		java -jar myjar.jar	a.a1.a11.a111.A			//执行jar文件指定入口点。





2.定义三角形类Trianle,里面包含三个int类型属性,分别表示三条边的长度,
  构造三角形对象时,任意两边之和是否大于第三边,如若不成立,抛出自定义异常。
答:
class EdgeTooSmallException extends Exception { // 这个异常是用来判断边小于或等于0的
private String info;

public EdgeTooSmallException() {
}

public EdgeTooSmallException(String info) {
this.info = info;
}

public String getInfo() {
return info;
}

public void setEdgeInfo(String info) {
this.info = info;
}
}

class EdgeNotMatchException extends Exception { // 这个异常是用来判断三角形的
private String info;

public EdgeNotMatchException() {

}

public EdgeNotMatchException(String info) {
this.info = info;
}

public String getInfo() {
return info;
}

public void setEdgeNotMatchException(String info) {
this.info = info;
}
}

class Triangle {
//三条边
private int edgea;
private int edgeb;
private int edgec;

// edgea的get/set方法
public int getEdgea() {
return edgea;
}

public void setEdgea(int edgea) throws EdgeTooSmallException {
if (edgea > 0) {
this.edgea = edgea;
} else {
throw new EdgeTooSmallException("边长A不能小于或等于0");
}
}

// edgeb的get/set方法
public int getEdgeb() {
return edgeb;
}

public void setEdgeb(int edgeb) throws EdgeTooSmallException {
if (edgeb > 0) {
this.edgeb = edgeb;
} else {
throw new EdgeTooSmallException("边长B不能小于或等于0");
}
}

// edgec的get/set方法
public int getEdgec() {
return edgec;
}

public void setEdgec(int edgec) throws EdgeTooSmallException {
if (edgec > 0) {
this.edgec = edgec;
} else {
throw new EdgeTooSmallException("边长C不能小于或等于0");
}
}

// 判断是不是三角形
public static void Checking(int x, int y, int z)
throws EdgeNotMatchException {
if (x + y <= z || x + z <= y || y + z <= x) {

throw new EdgeNotMatchException("这不是三角形");
} else {
System.out.println("这是个三角形");
}
}
}

class TriangleDemo {
public static void main(String[] args) {
// 构造三角形
Triangle t1 = new Triangle();

// 设定三条边,找出异常
try {
t1.setEdgea(4);
t1.setEdgeb(5);
t1.setEdgec(3);
t1.Checking(t1.getEdgea(), t1.getEdgeb(), t1.getEdgec());
} catch (EdgeTooSmallException e) {
System.out.println(e.getInfo());
System.exit(-1);
} catch (EdgeNotMatchException e) {
System.out.println(e.getInfo());
System.exit(-1);
}

System.out.println("边长为" + t1.getEdgea() + "," + t1.getEdgeb() + ","
+ t1.getEdgec());

}
}

3.Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理,
  要求年有效、月有效、日有效、年月日指定的具体日期有效,对不同情况分别抛出不同的异常。
答:
/**
 * Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理,
 * 要求年有效、月有效、日有效、年月日指定的具体日期有效,对不同情况分别抛出不同的异常。
 * 
 */
public class Brithday {
private String birthday;

public String getBirthday() {
return birthday;
}

public void setBirthday(int year, int month, int date)
throws InvalidParamExcetion {
// 判断年份
if (year < 1900 || year > 2016) {
throw new InvalidParamExcetion("年份不合适,请传入1900年到2016年之间的年份");
}
// 判断月份
if (month <= 0 || month > 12) {
throw new InvalidParamExcetion("月份不合适,不存在" + month + "月");
}
// 判断日期
if (date > 31 || date <= 0) {
throw new InvalidParamExcetion("日期不合适,不存在" + date + "日");
}
boolean isThirdOne = date == 1 || date == 3 || date == 5 || date == 7
|| date == 8 || date == 10 || date == 12;
if (!isThirdOne && date == 31) {
throw new InvalidParamExcetion("日期不合适," + month + "月不存在" + date
+ "日");
}
if (month == 2 && date > 29) {
throw new InvalidParamExcetion("日期不合适,2月不存在" + date + "日");
}
if (year % 4 != 0 && month == 2 && date == 29) {
throw new InvalidParamExcetion("日期不合适," + year + "不是闰年,所以2月不存在"
+ date + "日");
}

System.out.println("生日为:" + year + "年" + month + "月  " + date + "日 ");
}

public static void main(String[] args) throws InvalidParamExcetion {
Brithday person = new Brithday();
try {
person.setBirthday(2015, 12, 5);
person.setBirthday(2016, 2, 29);
person.setBirthday(2015, 2, 29);
// 因为上一句异常了,所以不会执行这一句
person.setBirthday(2015, 3, 5);
} catch (InvalidParamExcetion e) {
}

}

}

/**
 * 非法参数异常
 * 
 */
class InvalidParamExcetion extends Exception {

public InvalidParamExcetion(String msg) {
super(msg);
System.out.println(msg);
}

}


4.将类定义到指定的包下。com.it18zhang,编译之后,打成jar文件。
答:
打包java库文件。
[将类路径下的类打成jar文件]
jar cvf myjar.jar -C classes/ .
jar cvfe myjar.jar com.it18zhang.A -C classes/ .//e指定的入口点.

[使用java -jar参数来运行程序]
java -jar myjar.jar//执行jar文件
java -jar myjar.jarcom.it18zhang.A//执行jar文件指定入口点。

5.相互之间使用jar包,放置cp下,对class进行重用。
答:答案略
6.设计程序,考查修饰符。public -> protected -> default -> private(选做题)
答:
package com.it18zhang.job.demo;

public class Person {
protected String protectName;
public void method_public() {
System.out.println("Person method_public");
}
protected void method_protect(){
System.out.println("Person method_protect");
}
void method_defult(){
System.out.println("Person method_defult");
}
private void method_private(){
System.out.println("Person method_private");
}

}


package com.it18zhang.job.demo;

public class People {
public static void main(String[] args) {
System.out.println("同包中的类修饰符权限测试");
Person person = new Person();
person.method_public();
person.method_protect();
person.method_defult();
//无法调用private
//person.method_private();
}

}


package com.it18zhang.job.demo2;

import com.it18zhang.job.demo.Person;



public class Student extends Person{

public static void main(String[] args) {
System.out.println("子类修饰符权限测试");
Student student = new Student();
student.method_public();
student.method_protect();

//无法调用defult、private
//student.method_private();
//student.method_defult();
}

}



package com.it18zhang.job.demo2;

import com.it18zhang.job.demo.Person;

public class Other {

public static void main(String[] args) {
System.out.println("其他包中类修饰符权限测试");
Person person = new Person();
person.method_public();
//无法调用其他包中类的protect,default和private方法
//person.method_protect();
//person.method_defult();
//person.method_private();
}

}


以上是关于IT十八掌第七天总结(含作业)的主要内容,如果未能解决你的问题,请参考以下文章

IT十八掌第六天总结(含作业)

IT十八掌掌第十七天课程总结

IT十八掌掌第九天课程总结

IT十八掌掌第十天课程总结

IT十八掌掌第十二天课程总结

IT十八掌掌第十四天课程总结