Java基础学习1
类的概念:
一堆具有共同的成员变量、属性和成员方法、功能对象集合接口的概念:
接口是功能的集合,就是方法的集合
也就是说 接口中只能定义方法,不能定义普通的成员变量
而且接口中的成员方法,必须都是抽象的
接口是比抽象类还要抽象的一种类型问题:接口能创建对象吗?不能
接口作用:天生作为“父接口”接口的定义:
定义接口用关键字:interface
定义枚举用关键字:enum格式:
public interface 接口名字{//成员变量,不能定义普通的成员变量 //成员方法:必须都是抽象 public abstract 返回值类型 方法名();}
类和接口的本质区别不大,他们的源码都是.java文件
编译后都是.class文件类与类之间:继承,而且是单继承,一个子类,只能有一个直接父类
接口和接口之间:继承,但是可以多继承,一个子接口 可以有多个直接父接口面试题:Java到底支不支持多继承?
如果是类与类 不支持多继承 只支持多层继承 如果是接口和接口 支持多继承 也支持多层继承类和接口之间:不叫继承(extends),叫实现(implements),可以多实现
只有类 实现接口接口中成员的特点
5.1成员变量,但是必须有固定修饰符public static final 数据类型 变量 = 值
5.2成员方法,必须是固定修饰符public abstract 即抽象方法
5.3接口不可以创建对象(抽象类也是)
5.4实现类 实现类接口,那么必须重写接口中所有的抽象方法,然后才能创建对象否则 这个实现类 还是一个抽象类,是不能创建对象的 在开发中最常用的模式: public class A extends AbstractClassB implements 接口A,接口B{ 注意: A中必须重写 抽象类中的抽象方法,以及所有接口中的抽象方法 }接口和抽象类的异同:
相同点:
a.都不能创建对象
b.都是作为父类/父接口
c.子类/实现类 都必须重写抽象方法,然后才能创建对象不同点:
a.抽象类用关键字abstract 接口用关键字interface
b.接口中只要有方法,必须都是抽象的
c.抽象类可以定义任意成员变量 接口的成员变量必须public static final修饰
d.类和抽象类之间关系是单继承,类和接口之间关系是多实现
e.思想上的区别
1.抽象类中必须定义整个继承体系中的共性内容
2.接口中定义 整个继承体系之外的 额外扩展的功能。
7.面向对象3大特征:封装(安全性),继承(扩展性),多态(灵活性)
多态:
前提1.必须有子父类关系
2.必须有方法的重写
多态在Java中的表现形式:
父类类型 变量名 = new 子类类型();
接口类型 变量名 = new 实现类();
Animal an = new Cat();
父类类型的变量指向了子类的对象
注意:
1.使用多态调用成员变量
编译时,看父类
运行时,看父类
2.使用多态调用成员方法
编译时,看父类
运行时,看子类
总结:
弊端:多态只能调用子父类共有的方法,不能调用子类特有的方法
好处:提高灵活性
父类类型的变量,可以接收任何一个子类的对象
调用方法的时候,编译是看父类,运行时运行的传递过来的子类对象的方法
弊端的解决方案:
向下转型:强制类型转换
向上转型:自动类型转换 (就是多态)
向下转型也有弊端:
把父类的变量 转成任何子类类型时候,编译器直接通过
可以转成cat,本质是dog 所以出错
Java中解决向下转型弊端的方法:
一个关键字Instanceof 运算符
作用:判断某一个变量 不是 该类的类型
格式:
boolean b = an instanceof 类名
多态提高程序的灵活性,扩展性,复用性。
static的介绍:
static的作用用来修饰类中的成员
1.如果一个类的成员被static修饰了,怎么访问? 类名.成员变量名
存在方法区中的静态区,只有一个空间 优先于对象存在
2.类名.成员变量(推荐) 对象.成员变量 都可以
3.所有对象共有的,被staic修饰的成员属于类,不属于单个对象
4.静态没有多态性 静态不属于对象,属于类
5.静态代码块:在类的成员位置 static{ 代码 }特点:
使用到这个类时,JVM会自动执行静态代码块
只会第一次使用时执行
优先级比构造方法高,比main方法高
作用:用来初始化类的,myswl数据(静态代码块来加载驱动)final可以修饰
类,成员变量,成员方法,局部变量(基本类型,引用类型)
1.修饰类(太监类),不能被继承
2.final修饰成员变量:2.1必须在创建对象之前有却确定的值 2.3只能赋值一次3.修饰方法:
不能被子类重写4.修饰基本类型局部变量
被final修饰的基本类型局部变量 只能赋值一次5.修饰引用类型局部变量
被final修饰的引用类型局部变量 只能赋值一次 但是引用类型所指向的对象中内容是可以改变的匿名内部类:是一种特殊的语法,用来快速创建抽象类的子类对象
用来快速创建 接口的实现类对象AbstractAnimal an1 = new AbstractAnimal(){
重写}
多态引用数据类型
a.类作为方法的参数或者返回值(我们需要传递或返回的是该类的对象)
b.抽象类作为方法的参数和返回值 (和9结合起来)我们需要传递或返回的是该抽象类的子类的对象
c.接口作为方法的参数和返回值 (我们需要传递或返回的是该接口的实现类的对象)链式编程
权限修饰符
如果一个成员只想在本类中使用 用private修饰
如果一个成员想在本类和本包的其它类中使用 不写 default
如果一个成员想在本类,本包,其他包的子类中使用 用protected修饰
如果一个成员想在所有类中使用 用public修饰Object类:
类Object是类层次结构的根类
所有类都必须直接或者间接的继承object- boolean equals(Object obj);
p1.equals(p2);
//比较两个对象是否相等,在Object类中定义equals方法比较是 两个对象的地址
在String类中 重写了object父类中的equals方法,
本来在object类中比较的是两个对象的地址
在String重写后变成比较两个字符串的内容
我们程序员 通常自定义一个类 也会重写equals
- toString(); //返回该对象的字符串表示
Object类中的默认的返回值:包名.类名@地址
实际开发中toString的使用,重写toString 返回对象中的成员变量
- boolean equals(Object obj);
异常:是java代码编译或者运行过程中
异常的继承体系:
Throwable(异常和错误的超类):可以抛出去的东西--Exception:异常(普通问题) --编译时异常: 指的是Exception 以及Exception子类 (除了RuntimeException) --运行时异常: RuntimeException以及其子类 --Error:错误(严重问题) 比如:OutOfMemoryError:超出内存错误 如果程序出现了错误,只能改代码创建异常对象,对异常的基本操作:
1.抛出异常 2.处理异常(捕获异常,将异常获取,使用try/catch做分支处理)
JVM默认处理异常的方式:(中断处理)
处理异常的方式:
1.不处理public 返回值类型 方法名(参数)throws xxxException{ }2.捕获处理
try{ 可能出现的异常的代码 }catch(Exception e){ //处理异常 }finally{ //写上必须要执行的代码 //释放资源的代码 }3.其他的处理方式
多个异常分别处理 多个个异常一次捕获多次处理 多个异常一次捕获一次处理父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理。
打印异常信息:printStackTrace
1.RuntimeException
2.ClassCastException 类型转换异常(向下转型的时候)
3.ArrayIndexOutOfBoundsException 数组下标越界
4.StringIndexOutOfBoundsException 字符串下标越界
自定义异常类:
1.创建一个类,这个类必须用Exception结尾
2.必须继承Exception 或者 RumtimeException
3.自定义的异常 至少有两个构造a.空参数构造 b.带有String类型参数构造Object类:是所有类的根类
boolean equals(Object obj)
a.Object类中equals方法,比较是两个对象的地址,就是==号的作用
b.重写 比较两个字符串的内容 比较两个对象的成员变量的值
String toString();//返回该对象的字符串表示 hashCode()返回该对象的数字表示什么叫设计模式?
把解决问题的方案 总结出一个套路代理设计模式
1.1静态代理设计模式
1.2动态代理设计模式date类:日期类
表示特定的瞬间,精确到毫秒public Date(); //无参构造
public Date(long time);
1.DateFormat是一个抽象类 我们不能用它
2.我们使用它的一个子类:SimpleDateFormat
SimpleDateFormat:简单的日期格式化类
1.构造public SimpleDateFormat(String pattern);//以指定的模式 创建一个日期格式化对象2.成员方法
public String format(Date d);//格式化一个日期对象,返回格式化后的一个字符串 public Date parse(String s);//把一个字符串形式的日期,解析成Date对象Calender类
获取Calendar的子类对象
获取Calender对象的某个字段 (get)System类
它不能被实例化,因为构造方法私有化了
而且System类中的方法都是静态的,通过类名就可以直接访问
System.exit(0); //退出JVM
public static void gc(); //运行java的垃圾回收器(并不是马上运行)
public static String getProperty(String ProertyName);//获取某一个属性的值
public static long currentTimeMillis();//获取当前系统的毫秒值String(不可变) StringBuilder(可变)
//当出现大量的字符串拼接运算 时 用StringBuilder基本数据类型 对应的引用类型
int Integer
拆箱:包装类型—>基本类型
装箱:基本类型—>包装类型正则表达式:
javac 生成编译文件
java 执行类文件,出错原因java程序运行class文件,对于有包名的类,java把包名当成文件夹处理.”包名+类名”相当于”文件夹目录+类名”来寻找类。
b = a++ a先赋值,再自增。
mysql Orcale DB2(银行系统) SQLite(手机端) SQLServer SyBase(建模工具PowerDesigner)


