黑马java学习笔记
1、项目结构规范
2、static关键字(静态变量 ),修饰成员变量,表示该成员变量只在内存中只存储一份,可以被共享访问,修改
1)static修饰方法
实例方法与静态方法的区别
实例方法:无static修饰,属于对象的,通常表示对象自己的行为,可以访问对象的成员变量
静态方法:有static修饰,属于类,可以被类和对象共享访问
注意:同一个类中访问静态成员,可以省略类名不写
Students s = new Student();
s.study//实例方法,需要加对象名
getMax(200,20);//静态方法,不需要加对象名
2)static应用:工具类
对于一些应用程序中多次需要用到的功能,可以将这个功能封装成静态方法,放在一个类中,这个类就是工具类
3)代码块与静态代码块
//斗地主54张牌初始化 静态代码块
3 设计模式(单例模式:饿汉单例、懒汉单例)
package Singlelnstance;
/**
* 目标:学会使用饿汉单例方式定义单例类
*/
public class Singlelnstance1 {
/**
* 定义一个公开的静态的成员变量存储一个类的对象
* 饿汉:在这里加载静态变量的时候已经创建对象了
* 对外无论定义多少次对象,实际上都是同一个对象
* public static int onLineNumber = 161;
*/
public static Singlelnstance1 instance = new Singlelnstance1();
/**
* 把构造器私有,原来都是公有构造器 、 构造器私有化,不让工具类对外产生对象,减少内存
*/
private Singlelnstance1(){
}
}
package Singlelnstance;
public class SingleInstance2 {
/**
* 创建一个静态的成员变量储存本类的对象
* 注意:此时不能初始化对象
*/
private static SingleInstance2 instance;//null
/**
* 把构造器私有,原来都是公有构造器 、 构造器私有化,不让工具类对外产生对象,减少内存
*/
private SingleInstance2(){
}
/**
* 定义一个方法,让其他地方可以来调用获取一个对象
*/
public static SingleInstance2 getInstance(){
if (instance == null){
//第一次来获取对象
instance = new SingleInstance2();
}return instance;
}
}
4、继承(父类与子类的继承)
package extend_test;
/**
* 角色类 做父类
*/
public class Role {
private String name;
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;
}
private int age;
/**
* 共同行为
*/
public void queryCourse(){
System.out.println(name + "开始查看课程信息~~~~");
}
}
================================================================================
package extend_test;
public class Student extends Role{
//独有属性
private String className;
//独有行为
public void writeInfo(){
System.out.println(getName() + "今天学习感觉美美的");
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
4.1、继承的规则
在子类方法中访问成员(成员变量、成员方法)满足:就近原则
name(子类) / super.name(父类) run()(子类) / super.run()(父类)
4.2、方法重写
当子类需要父类的功能、但父类的该功能不完全满足自己的需求时
子类可以重写父类中的方法
添加@Override 判断重写方法是否正确
public calss phone{
public void call(){
System.out.println("打电话");
}
}
=======================================================
public calss NewPhone extends phone{
//方法重写
@Override //别人一看就知道这个是重写方法
public void call(){
super.call();
System.out.println("支持视频通话");
}
}
public Student(String name){
this(name."新疆大学吴昊臻");
}
this访问本类构造器实现有输入学校名字则替换,无输入学校名字则自动填入:新疆大学吴昊臻