0717 抽象类/接口/异常/==-equals()/搜索字符串/包装类型(统计字符数)/hashCode()/StringBuffer/pingSQL/2018年美式日历

抽象类与接口
  什么是抽象类?
  有一些类没有必要实例化,实例化没有意义,它可以封装通用
  的业务代码
  Animal -- 没有必要实例化
  Dog
  Cat
  Fish ...

   抽象类用abstract修饰
   抽象方法:用abstract修饰的方法,只有方法的声明,没有方法的实现
   在子类中实现抽象方法

  一个子类继承抽象类,就必须实现抽象中中声明的所有抽象方法,否则
  这个子类也必须声明为抽象类

  案例:写Cat类,继承Animal,测试

  侧重点在代码重用
  什么是接口?
   更加纯粹的抽象类,将抽象类中非抽象的因素都剥离了,专注于
   顶层设计

   接口中只能由两种成员
     a. public abstract 修饰的方法
     b. public static final 修饰的变量 -->常量
 侧重点在设计对象

     一个类只能继承一个一般类或者抽象类
    但是一个类可以实现多个接口(变相的实现了多继承)
    接口可以继承接口,而且是多继承
     

异常
   什么是异常?
      程序在运行是发生的错误
      异常发生的时候虚拟机(JVM)会将异常信息封装成对象
      异常信息: a. 异常消息(对异常简明扼要的描述)
                     b.异常堆栈信息(异常因果的回溯)

   异常的体系结构
          Throwable
           Error(程序不用处理)
           Exception
                --运行时异常 RuntimeException,可以处理,也可以不处理
                --检查异常(除开运行时异常以外的所有异常),必须处理
 
   异常的处理
      抛出:抛给异常发生代码的调用者
      捕获:
    try{
       //异常可能发生的代码
    }catch(Exception e){//e是异常的引用
       e.printStackTrace();//打印异常堆栈信息
   }finally{
         //不论异常发生与否,都必须执行的代码
         //一般用来释放资源
   }
   自定义异常(针对具体业务逻辑)
   案例:年龄异常案例


java.lang包
包装类型 (统计字符案例)  
  基本类型     包装类型
   byte              Byte             
   short             Short                           
   int                 Integer
   long              Long
   float              Float
   double          Double
   boolean        Boolean
   char              Character


案例:从控制台输入一个字符串
        "hello123ABC##@@"
        统计由多少个大写字母,小写字母,数字,其他字符
  
        char ch =  charAt(3)
         'a'=<ch<='z'
         'A'=<ch<='Z'
         '0'=<ch<='9'
         else..

扫描二维码关注公众号,回复: 2590426 查看本文章

Object(equals()方法)
   java根类,所有的类都直接或者间接继承于Object类
    ==比较的是地址值
    equals()方法比较是对象的内容
    创建一个必须重写从Object继承过来的equals()方法,才能比较
     对象的内容
     如何重写equals()方法

String类型(indexOf ,lastIndexOf() )
(将输入的多个英文名转换为"Tom"的形式)
 tom TOM  toM ... 

 字符串一但创建就不可改变,所有的拼接和修改都是创建新的对象
 如果频繁的拼接或修改,会产生大量的中间对象,造成内存溢出

StringBuffer(判断回文,拼接sql)
  可变字符串

java.util包
Date
   分装了日期于时间的信息
   日期:年 月 日
   时间:时 分 秒 毫秒
  Date date = new Date();//当前系统时间
SimpleDateFormat 
   格式器:用来定义Date对象的格式
   yyyy -- 年
   MM -- 月
   dd  -- 日
 
   HH 24小时制时
   hh  12小时制时
   mm 分
   ss  秒


Calendar (打印日历,打印全年日历)
  打印当前月的日历

抽象类 

package demo03;

public abstract class Animal {//抽象类
    private String name;
    private int age;
    
    public Animal(){}
        
	public Animal(String name, int age) {
		super();
		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;
	}
    
	//eat() ---设计为抽象方法
     public abstract void eat();
	//sleep()..
	public abstract void sleep();
	
    
}
package demo03;

public class TestAnimal {
   public static void main(String[] args) {
	   //抽象类不能创建对象(实例化)
	   //抽象类有没有构造方法? 有
	   //留给子类的构造方法调用
	   //Animal an = new Animal();
	   //抽象类可以创建上转型对象
	   Animal dog = new Dog("旺财",1);
	   dog.eat();
	   dog.sleep();
	   Animal cat = new Cat("花花",2);
	   cat.eat();
	   cat.sleep();
   }
}
package demo03;

public class Dog extends Animal{
	public Dog() {
		super();
	}

	public Dog(String name, int age) {
		super(name, age);

	}

	@Override
	public void eat() {
		System.out.println("小狗"+getName()+"在啃骨头");
		
	}

	@Override
	public void sleep() {
		System.out.println("小狗"+getName()+"白天在睡觉");		
	}



}
package demo03;

public class Cat extends Animal {
	
	public Cat() {
		super();
	}

	public Cat(String name, int age) {
		super(name, age);

	}

	@Override
	public void eat() {
        System.out.println("小猫"+getName()+"在吃东西");

	}

	@Override
	public void sleep() {
		System.out.println("小猫"+getName()+"在屋顶上睡觉");

	}

}

接口 |多继承 

package demo04;

public interface IEat {
	// public static final int a = 1 ;
     void eat();
}
package demo04;

public interface IFlying {
    void flying();
}
package demo04;

public interface ISleep {
     void sleep();
}
package demo04;

public interface ISwimming {
      void swimming();
}
package demo04;

public interface ISome extends IFlying ,ISwimming,IEat,ISleep{

}
package demo04;

public class Cat implements IEat,ISleep{
    private String name;
    private int age;
    
    
	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}


	public Cat(String name, int age) {
		super();
		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 void eat() {
		System.out.println("小猫"+this.name+"在吃鱼");
		
	}


	@Override
	public void sleep() {
		System.out.println("小猫"+this.name+"在屋顶上睡觉");
		
	}

}
package demo04;

public class Bird implements ISome {

	@Override
	public void flying() {
		//xxx
		
	}

	@Override
	public void swimming() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		
	}

}

 异常 try-catch

package demo05;

public class Demo01 {
   public static void main(String[] args) {
            test();
            //java.lang.ArithmeticException
   }
   
   public static void test(){
	     int a = 10;
	     a = a/0;    //除零异常
   }
}
package demo05;

public class Demo02 {
   public static void main(String[] args) throws ClassNotFoundException  {
	    try {
	    	//可能发生异常的代码
			Class.forName("java.lang.String");
			System.out.println("异常后的代码");
		} catch (ClassNotFoundException e) {
			//处理异常的代码
			e.printStackTrace();
			throw  e;
		}
	    System.out.println("try catch 后的代码");
  }
}

  自定义异常 try-catch-finally

package demo05;

public class Emp {
    private int id;
    private String name;
    private int age;
    private String sex;
    private float sal;
    private String dept;
	public Emp() {
		super();
	}
	
	public Emp(int id, String name, int age, String sex, float sal, String dept) 
			throws AgeException {
		super();
		this.id = id;
		this.name = name;
		if(age<18 || age>60){
			 throw new AgeException("合法年龄:18~60");
		}
		this.age = age;
		this.sex = sex;
		this.sal = sal;
		this.dept = dept;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) throws AgeException {
		if(age<18 || age>60){
			 throw new AgeException("合法年龄:18~60");
		}
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public float getSal() {
		return sal;
	}

	public void setSal(float sal) {
		this.sal = sal;
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}
    
    
}
package demo05;

public class TestEmp {
     public static void main(String[] args) {
		    try {
				Emp e = new Emp(1,"eric",20,"男",20000,"java开发部");
				e.setAge(300);
				System.out.println("异常没有发生");
			} catch (AgeException e) {
				e.printStackTrace();
				System.out.println("异常发生了");
			}finally{
				//不论异常发生与否,都必须执行的代码
				//一般用来释放资源
				 System.out.println("finally");
			}

	}
}
package demo05;
//здЖЈвхвьГЃ
public class AgeException extends Exception{

	public AgeException(String message) {
		super(message);
	}
    
}

equals()   重写equals()方法  搜索字符串

package demo06;

public class Demo03 {
     //equals()方法
	public static void main(String[] args) {
		/*
	    String s1 = new String("hello");
	    String s2 = new String("hello");
	    System.out.println(s1==s2);//false --比较地址值
	    System.out.println(s1.equals(s2));//true --比较对象的内容是否相同*/
		Employee e1 = new Employee(1,"eric","男",24,20000,"前端开发部");
		Employee e2 = new Employee(1,"eric","男",24,20000,"前端开发部");
		System.out.println(e1==e2);//false
		System.out.println(e1.equals(e2));//true
		
   }
} 
package demo06;

public class Demo04 {
   public static void main(String[] args) {
	   String str = "java是一名面向对象的语言,java语言基于面向对象思想"
	   		+ "通过学习java语言,可以加深对面向对象思想的理解";  
	   //搜索第一个java的位置
	   int idx = str.indexOf("java",0);
	   System.out.println(idx);
	   //搜索第二个java的位置
	   idx = str.indexOf("java",idx+1);
	   System.out.println(idx);
	   //搜索倒数第一个面向对象
	   int idx2 = str.lastIndexOf("面向对象");
	   System.out.println(idx2);
	   //搜索倒数第二个面向对象
	    idx2 = str.lastIndexOf("面向对象", idx2-1);
	    System.out.println(idx2);
	   
  }
}
package demo06;


import java.util.Arrays;
import java.util.Scanner;

public class Demo05 {
    /**
     * (将输入的多个英文名转换为"Tom"的形式)
 tom TOM  toM ... 
     */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String[] arr = new String[3];
		for (int i = 0; i < 3; i++) {
			System.out.print("请输入第"+(i+1)+"个英文名:");
			 arr[i] = sc.nextLine();
		}
		System.out.println(Arrays.toString(arr));
		for (int i = 0; i < arr.length; i++) {
			  String name = arr[i];
			  //(name.charAt(0)+"").toUpperCase()  首字符大写
			  //name.substring(1).toLowerCase(); 其余字符小写
			  arr[i] = (name.charAt(0)+"").toUpperCase() +name.substring(1).toLowerCase();
		}
		System.out.println(Arrays.toString(arr));
	}
}
package demo06;

public class Employee {
	 private static final Object Employee = null;
	//私有的成员变量
     private int id;
     private String name;
     private String sex;
     private int age;
     private float salary;
     private String dept;
     //空参的构造方法
     public Employee() {
    	 super();
    	 // TODO Auto-generated constructor stub
     }

	//有参的构造方法
     public Employee(int id, String name, String sex, int age, float salary, String dept) {
    	 super();
    	 this.id = id;
    	 this.name = name;
    	 this.sex = sex;
    	 this.age = age;
    	 this.salary = salary;
    	 this.dept = dept;
     }

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public float getSalary() {
		return salary;
	}
	public void setSalary(float salary) {
		this.salary = salary;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
     
	//展示员工信息
	public void printInfo(){
		  System.out.println(id+","+name+","+sex+","+age+","+salary+","+dept);
	}
     
	//加薪
	public void addSalary(float salary){
		 this.salary += salary;
	}



	//重写equals()方法
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Employee other = (Employee) obj;
		if (age != other.age)
			return false;
		if (dept == null) {
			if (other.dept != null)
				return false;
		} else if (!dept.equals(other.dept))
			return false;
		if (id != other.id)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (Float.floatToIntBits(salary) != Float.floatToIntBits(other.salary))
			return false;
		if (sex == null) {
			if (other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		return true;
	}
	
	/*
	@Override
	public boolean equals(Object obj) {
	     if(obj==null){
	    	 return false;
	     }
	     
	     if(obj==this){
	    	  return true;
	     }
	     
	     if(!(obj instanceof Employee)){
	    	  return false;
	     }
	     
	     Employee other = (Employee)obj;
	     return this.id==other.id && this.name.equals(other.name)
	    		 && this.sex.equals(other.sex) && this.age==other.age 
	    		 && this.salary==other.salary && this.dept.equals(other.dept);
	    		 
	}*/
	
     
}

包装类型(统计字符数量)/ hashCode()   StringBuffer/ pingSQL/打印时间/2018年美式日历

  包装类型(统计字符数量) 

package demo06;

public class Demo01 {
   /**
    * 包装类型
    */
	public static void main(String[] args) {
		//构造方法创建对象
		  Integer i = new Integer("10");
		  System.out.println(i);
		//可以接受空值
		  i = null;
		//包装类型和基本类型之间可以自由转换  
		//自动装箱
		  Integer a = 20;// new Integer(20);
		 //自动拆箱
		  int b = new Integer(30);
		  //可以将字符串解析成数值类型
		  int num = Integer.parseInt("666");
		  System.out.println(num);
		  Integer num2 = Integer.valueOf("888");
		  System.out.println(num2);
	}
}
package demo06;

import java.util.Arrays;
import java.util.Scanner;

public class Demo02 {
   /**
    * 案例:从控制台输入一个字符串
        "hello123ABC##@@"
        统计由多少个大写字母,小写字母,数字,其他字符
    */
	public static void main(String[] args) {
		  Scanner sc = new Scanner(System.in);
		  System.out.print("请输入一个字符串:");
		  String str = sc.nextLine();
		  int[] counts = new int[4];
		  //将字符串str拆成一个字符数组
		  char[] chs = str.toCharArray();
		  //System.out.println(Arrays.toString(chs));
	       for(char c:chs){
	    	    if(Character.isUpperCase(c)){//判断是否为大写字母
	    	    	counts[0]++;
	    	    }else if(Character.isLowerCase(c)){//小写字母
	    	    	 counts[1]++;
	    	    }else if(Character.isDigit(c)){//数字
	    	    	 counts[2]++;
	    	    }else{//其他字符
	    	    	 counts[3]++;
	    	    }
	       }
	       System.out.println("大写字母:"+counts[0]);
	       System.out.println("小写字母:"+counts[1]);
	       System.out.println("数字:"+counts[2]);
	       System.out.println("其他字符:"+counts[3]);
	}
}

       hashCode()   StringBuffer

package demo06;

public class Demo06 {
   public static void main(String[] args) {
	   /*
	   String s = "hello";
	   System.out.println(s.hashCode());
	    s += "world";
	    System.out.println(s.hashCode());*/
	   StringBuffer s = new StringBuffer("hello");
	   System.out.println(s.hashCode());
	   System.out.println(s);
	   s.append("world");
	   System.out.println(s);
	   System.out.println(s.hashCode());
	  
	    
	    
   }
}
package demo06;

import java.util.Scanner;

public class Demo07 {
	 /**
	  * 从控制台输入一个字符串
	  * 判断它是否是回文
	  *    上海自来水来自海上
	  * @param args
	  */
    public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个回文:");
		String str = sc.nextLine();
		StringBuffer s = new StringBuffer(str);
		//反过来再转回字符串
		 String str2 = s.reverse().toString();
		 if(str.equals(str2)){
			  System.out.println("是回文");
		 }else{
			 System.out.println("不是回文");
		 }
	}
}

 pingSQL

package demo06;

import java.util.Scanner;

public class Demo08 {
    public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入姓名:");
		String name = sc.nextLine();
		System.out.print("请输入年龄:");
		 String age = sc.nextLine();
		 
		 String sql = pingSQL(name,age);
		 System.out.println(sql);
	}

	private static String pingSQL(String name, String age) {
		 StringBuffer s = new StringBuffer("select * from emp where 1=1");
		 if(name!=null && !"".equals(name)){
			  s.append(" and name like '%"+name+"%'");
		 }
		 if(age!=null && !"".equals(age)){
			   s.append(" and age="+age);
		 }
		return s.toString();
	}
}

打印时间

package demo06;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo09 {
    public static void main(String[] args) {
		 Date d = new Date();
		 //Tue Jul 17 16:37:01 CST 2018
		 //2018年7月17日 16时37分xx秒
		 System.out.println(d);
		 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 a HH时mm分ss秒");
		 String dateStr = sdf.format(d);
		 System.out.println(dateStr);
	}
}
package demo06;

import java.util.Calendar;

public class Demo10 {
    public static void main(String[] args) {
	     //创建一个日历对象
    	Calendar cal = Calendar.getInstance();
    	int year = cal.get(Calendar.YEAR);
    	System.out.println(year);
    	int month= cal.get(Calendar.MONTH);
    	//月:0~11 1月~12月
    	System.out.println(month);
    	int date = cal.get(Calendar.DATE);
    	//1~31
    	System.out.println(date);
    	//将2018年修改为2016年
    	cal.set(Calendar.YEAR, 2016);
    	//时间偏移方法
    	//7月-->5月
    	cal.add(Calendar.MONTH,-2);
    	//17日-->20日
    	cal.add(Calendar.DATE, 3);
	}
} 

打印本月日历

package demo06;

import java.util.Calendar;

public class Demo11 {
      /**
       * 打印本月日历
       * @param args
       */
	public static void main(String[] args) {
	      Calendar cal = Calendar.getInstance();
	      //将时间移动到本月的第一天
	      cal.set(Calendar.DAY_OF_MONTH, 1);
	      //本月第一天在所在周是第几天
	      int start = cal.get(Calendar.DAY_OF_WEEK);
	      //打印日历头
	      System.out.println("日\t一\t二\t三\t四\t五\t六");
	      //System.out.println(start);
	      for (int i = 1; i <=7*6; i++) {
			   if(i<start){
				    System.out.print("\t");
				    continue;
			   }
			   //打印日历
			   System.out.print(cal.get(Calendar.DATE)+"\t");
			   //打印7个空一行
			   if(i%7==0){
				   System.out.println();
			   }
			   //判断是否已经到了本月的最后一天
			   if(cal.get(Calendar.DATE) == cal.getActualMaximum(Calendar.DAY_OF_MONTH)){
				   break;
			   }
			   //日期的值增加1天
			   cal.add(Calendar.DATE, 1);
              
			   
		}
    }
}

2018年美式日历

package demo06;

import java.util.Calendar;

public class Demo12 {
	 //打印2018年全年的日历
    public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2018);
		System.out.println("\t\t\t2018年日历\t\t\t");
		for (int i = 0; i < 12; i++) {
			System.out.println("*************"+(i+1)+"月份***************");
			cal.set(Calendar.MONTH,i );
			 generateCal(cal);
		}
    
	}

	private static void generateCal(Calendar cal) {
	      //将时间移动到本月的第一天
	      cal.set(Calendar.DAY_OF_MONTH, 1);
	      //本月第一天在所在周是第几天
	      int start = cal.get(Calendar.DAY_OF_WEEK);
	      //打印日历头
	      System.out.println("日\t一\t二\t三\t四\t五\t六");
	      //System.out.println(start);
	      for (int i = 1; i <=7*6; i++) {
			   if(i<start){
				    System.out.print("\t");
				    continue;
			   }
			   //打印日历
			   System.out.print(cal.get(Calendar.DATE)+"\t");
			   //打印7个空一行
			   if(i%7==0){
				   System.out.println();
			   }
			   //判断是否已经到了本月的最后一天
			   if(cal.get(Calendar.DATE) == cal.getActualMaximum(Calendar.DAY_OF_MONTH)){
				   break;
			   }
			   //日期的值增加1天
			   cal.add(Calendar.DATE, 1);
             
			   
		}
	      System.out.println();
	}
}

猜你喜欢

转载自blog.csdn.net/Fern2018/article/details/81173792