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..
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);}@Overridepublic void eat() {System.out.println("小狗"+getName()+"在啃骨头");}@Overridepublic 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);}@Overridepublic void eat() {System.out.println("小猫"+getName()+"在吃东西");}@Overridepublic 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;}@Overridepublic void eat() {System.out.println("小猫"+this.name+"在吃鱼");}@Overridepublic void sleep() {System.out.println("小猫"+this.name+"在屋顶上睡觉");}}
package demo04;public class Bird implements ISome {@Overridepublic void flying() {//xxx}@Overridepublic void swimming() {// TODO Auto-generated method stub}@Overridepublic void eat() {// TODO Auto-generated method stub}@Overridepublic 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);//falseSystem.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;}/*@Overridepublic 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~31System.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();}
}
0717 抽象类/接口/异常/==-equals()/搜索字符串/包装类型(统计字符数)/hashCode()/StringBuffer/pingSQL/2018年美式日历相关推荐
- C语言 字符串(计算长度、统计字符个数、复制、连接、删除)核心代码全网最强汇总!
索引(均为指针函数调用形式) 一.计算字符串长度 方法一 方法二 二.统计字符个数 三.字符串复制 方法一 方法二 四. 字符串连接 五.字符串删除 一.计算字符串长度 方法一 核心代码: char ...
- linux shell: 搜索字符串,剔除包含特定字符的行
搜索代码中出现CONFIG_BOOTARGS的行,但又不希望有#define和#undef, 暂时不知带如何直接用一个语句做到,因此用了如下三个语句. find . -type f | xargs g ...
- c语言字符串字数统计,统计字符数 (C++代码)
解题思路: 注意事项: 参考代码: #include #include using namespace std; int main() { int n,m; cin>>n; while(n ...
- 基本类型和包装类型的区别详解
六年前,我从苏州回到洛阳,抱着一幅"海归"的心态,投了不少简历,也"约谈"了不少面试官,但仅有两三个令我感到满意.其中有一位叫老马,至今还活在我的手机通讯录里. ...
- 基本类型和包装类型的区别
1.基本类型有初始值,而包装类型的默认值是null 数据类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '/u0000' ...
- 包 权限修饰符 final 常量 枚举 抽象类 接口 多态 内部类 常用API 正则表达式 Lambda
包 什么是包? 包是用来分门别类的管理各种不同类的,类似于文件夹.建包利于程序的管理和维护. 建包的语法格式:package 公司域名倒写.技术名称.报名建议全部英文小写,且具备意义. package ...
- 【小白学java】java的面向对象设计:封装+继承+抽象类+接口(day06)
课程链接:共六天 第一天:开发环境:初识java,搭建环境 第二天:语言基础:关键字.变量.常量.运算符 第三天:数据结构:基本类型.包装类型.引用类型(数组和对象) 第四天:流程控制:分支判断.循环 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- 2020-09-10(抽象类+接口练习 部分附源码)(包装类笔记)
题目: 1.通过创建抽象类形状Shape,分别计算圆.长方形.三角形的面积和周长:Shape类中定义将来子类可能会用 到的属性和三个重载的构造方法以及求周长getper()和求面积area()的抽象方 ...
最新文章
- 三维空间平面拟合MATLAB
- 素数与量子物理的结合能带来解决黎曼猜想的新可能吗?
- jpa多表关联查询_JPA【关联查询篇】
- C、C++中接续符的使用
- Ubuntu返回到Gnome经典桌面!
- linux子系统使用rstudio,Windows 10 Linux子系统 (wsl)学习手记
- 我在阿里收获的N个成长
- 反序列化层遍历二叉树
- JavaSE简单实现多线程聊天
- 阿里云联合顶级卫星影像公司发布数字地球引擎
- JAVA就诊叫号_基于B/S的JAVA门诊就诊系统
- 模型集成01-Bagging/Boosting/Stacking
- MyBB论坛兼容智能手机的解决方案
- 局部变量与全局变量同名时如何在局部变量的作用范围内访问全局变量?
- python的flask前端显示图片_Python flask框架如何显示图像到web页面
- VMware 8安装Mac OS X 10.8 Lion
- 半加器设计(结构描述法)
- java.lang.IllegalStateException: Migration didn‘t properly handle
- 移位运算(左移和右移)
- 去哪儿网2015校园招聘笔试面试经历分享