package demo;
public class Person {
int age;
String name;
//方法重载.方法名相同,参数列表不同,它和参数类型有关,和参数名,
//返回类型,修饰符无关
public Person(){
this("aaa");
System.out.println("Person()");
}
public Person(String name){
System.out.println("Person(Stringname)");
}
public void sayHello(Person a){
//一个人对另外一个人打招呼
System.out.println(name+"say helloto "+a.name);
}
public static void main(String[] args) {
//构造方法作用1.创建对象 2.对对象初始化
//编译器在加载类时,去确定该类是否有构造方法,
//1.有 编译器不再提供构造方法
//2.没有 编译器提供无参的构造方法
//this的用法
//1.this.当前对象的(通常省略)
//2.this()在本类构造方法中调用重载的构造方法(很少用)
Person p=new Person();
// p.name="zhangsan";
// Person q=new Person();
// q.name="lisi";
// p.sayHello(q);
// q.sayHello(p);
}
}
Static 修饰符
3种用法
1.修饰属性 该属性是共用属性 类属性(没有static修饰的称为实例属性)
2.修饰方法 类方法 main(实例方法)
类方法(属性)是在类加载时分配空间,实例方法(属性)是在对象创建时分配空间的。
类属性(方法)如何调用?
1. 本类中直接调用
2. 类名点调用
3. 对象名点调用
实例属性(方法)
1. 对象名点调用
3.修饰代码块
static{} 优先加载,加载优先级高于main方法
框架时struts ,hibernate,加载配置文件用static{}来实现
JAVA中的变量有几种?
1. 局部变量 方法的参数,代码块中的变量(作用范围最小)在使用前必须初始化
2. 类中的属性(实例属性),只要对象存在,该对象的实例属性就存在(与对象共存亡,范围其次),系统自动在对象创建时初始化
3. 类属性(静态属性),只要类存在,该类属性就存在(与类共存亡,范围最大),系统自动在类加载时初始化
继承
目的:代码复用,创建类之后,总会继承自某个父类,Object是所有类的父类,单继承
子类对象如何创建?
创建时总会调用父类的无参构造方法(无论子类构造方法是否有参)??如何调用
采用super()调用
如果父类中有了带参数的构造方法时,最好再写一个无参的
super的用法
1.super()在子类构造方法中调用父类无参的构造方法,必须是在第一行出现,目的初始化父类的实例属性,然后继承过来
2.super点 属性(方法)
属性必须发生隐藏关系
子类中有和父类中同名的属性时,子类属性把父类属性隐藏了。为了访问父类中被隐藏的父类属性,使用super。
强调:this super属于对象(实例)级别的,不用直接作用在类方法中。
方法要求必须发生方法重写关系
子类方法对父类同名方法重新实现—方法重写(只针对于实例方法)
1. 两个类之间具有继承关系
2. 方法几乎完全相同(子类方法的访问权限不小于父类的访问权限,子类方法抛出的异常类型不大于父类方法抛出的异常类型)
练习
1. 面对对象基础 编程题1,6
2. 面向对象高级 编程题1,2
快捷方式
Ctrl + s 保存
Alt + / 提示
sysout Alt + / 补全输出语句
ctrl +shift +F 自动格式对其
ctrl + / 注释 (选中代码区域)
ctrl + shift + o 自动引入包
注意:每行结束有;方法括号要匹配 ""
一个类中
Package 包名;(必须唯一)
Import (引入包,可以有多个)
Class 类{
实例属性;
类属性;
构造方法(){}
实例方法(){}
类方法(){}
}
常用的包
java.util.* 工具类 Date,Map,List,Set
java.sql.* 数据库相关类
java.io.* 输入输出流
包
对类访问多了一层限制,每个类都会隶属于某个包
import 包名.类名;//一次只能引入一个类
import 包名.* ;//一次可以引入多个类,但是该包中子包中类无法引入
某认情况下同包中的类可以直接访问???
和能不能访问相关的内容 访问权限修饰符
访问权限4中
1. public 公开的
2. Protected 受保护的 父子类在不同包中,子类可以访问父类中受保护的
3. 默认的 同包中可以访问
4. Private 本类中可以访问
本类中,访问权限失去意义
本包中,除了私有的以外都可以访问
访问权限修饰符
1. 类 public 默认的(内部类是特例,四个都可以)
2. 属性 四个都可以
3. 方法 四个都可以(通常使用public 默认的)
类的访问权限直接决定属性和方法是否能访问到
引用类型的转换
1. 多种类型间有继承或者实现关系
2. 子类类型可以自动转换成父类类型(上转型),但是会失去作为子类类型特有的内容。优势:可以对子类类型进行统一控制。
3. 父类类型可以强转成子类类型(下转型),但是要求没有上转就不能发生下转。可能会出现ClassCastException
抽象类
1. 一种特殊的类,该类不能实例化。
2. 包含抽象方法的类一定是抽象类。(抽象方法可以是自己类中的,也可以通过继承关系得到的。)
3. 抽象类中可以没有抽象方法
修饰符 返回类型 方法名(参数列表){
方法体;
}
抽象方法没有方法体
修饰符 abstract 返回类型 方法名(参数列表);
子类必须对父类中继承过来的抽风方法进行方法重写,否则子类也必须声明为抽象类
接口 interface
1. 一种特殊的抽象类(一个标准),如果有方法全是抽象方法。
2. 接口中一般包含抽象方法和常量
为什么有接口?
在原有的继承关系中,无法获得某个能力,所以会考虑实现接口,当实现某个接口时,就必须具有该能力。
Final
最终的
1.属性 。常量,必须给初值,不容许修改
2.方法。 不容许方法重写 与abstract不能一起使用
3.类。最终类,不容许被继承
异常
没有异常处理时,程序会在出错的地方立刻停止。有了异常处理,可以保证程序的连贯性。
Try把可能出现问题的代码放在try中
多Catch语句时,保证小类型异常在前,大类型异常在后,否则编译错误。
Finally 一直都可以执行,无论是否发生异常。
除了使用system。Exit()关闭Java虚拟机。做善后工作的
Throw和throws
Throw用来在方法体中抛出异常对象的
Throws在方法定义上用来抛出异常类型的
Object
是所有类的共同父类
Equales()比较是否是同一个对象的
通常子类可以对Object继承过来的equles重写
public boolean equals(Object obj) {
Student temp= (Student) obj;
if (this.name.equals(temp.name)) {
return true;
} else {
return false;
}
}
String有两种创建方式
1. 静态创建 Strings=“aaa”
2. 动态创建 new String(“aaa”);
Date类的使用
Date d=new Date();
System.out.println(d);
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Stringtemp=f.format(d);
System.out.println(temp);
集合类
1. 集合对象的创建 java。Util
2. 如果放数据进去,如何提取数据,如何迭代数据
List
1. 数据怎么添加进去的,就怎么出来—有序,容许重复
Set—无序,不容许重复 iterator
Map
放入数据时都是键值对的形式 put(key,value)
提取数据时,通过键获得值 value=get(key)
键不容许重复,如果重复,后添加的会覆盖前添加的
Map集合通常不能直接迭代,可以通过keyset得到一个set集合,通过迭代set集合实现对map的迭代操作
Map中如何操作对象
创建一个班级---集合 map
班级中的学生---集合中的元素 student
学生的学号---key sid
自己写类,了解类的所有关系
以后更多使用别人写好的类,只需要知道如何使用就OK
菜单
学生管理系统
1添加学生
2删除学生
3更新学生
4查询所有学生信息
5按学号查询
6退出系统
Student类
Database类模拟数据库
Test类模拟数据库的调用