面向对象
封装
提高安全性,提高复用性,把复杂的事情简单化
private 一种权限修饰符,被修饰的成员只能在本类中访问,所以private一般用来修饰成员变量
而public 则一般用来修饰成员方法
定义一个标准的JavaBean类
1、成员变量,全部用private修饰
2、构造方法,无参数构造,全参构造
3、公共的访问方式
继承
子类拥有父类的非私有成员(包括成员变量、成员方法)
Java中使用变量的规则:
遵循“就近原则”,局部位置有就使用
没有就去本类的成员位置找,有就使用
没有就去父类的成员位置找,有就使用,没有就报错
this和super的区别
this的本质是对象,从本类的开始找
super的本质是父类内存空间的标识,从分类开始找
super.成员变量,调用的是父类的成员变量
super.成员方法,调用的是父类的成员方法
在子类当中,所有的构造方法的第一行都有一个默认的super()用来访问父类的无参构造方法,例如:
public class son extends father{
public son(){//子类当中的空参构造
super();//可写可不写,不写的话也默认存在
System.out.println("111");
}
}
如果父类没有带参构造,可以通过super(参数)的形式访问父类的带参构造。
方法重写
Java中的访问权限修饰符
本类 | 同包下的类 | 不同包下的子类 | 不同包下的无关类 | |
private | ✔ | |||
默认 (什么都不写) | ✔ | ✔ | ||
protected | ✔ | ✔ | ✔ | |
public | ✔ | ✔ | ✔ | ✔ |
总结:
private :强调的是给自己使用
默认 :强调的是给同包下的类来使用
protected:强调的是给子类使用
public :强调的是给大家使用
如果需要重写父类的成员方法可以在子类重写方法的上一行加上@Override便于标记起来,这句话可有可无
在使用多态的时候,父类引用不能使用子类的特有成员,如果想要使用,就要实现类型转换。
而类型转换只能在继承层次内进行转换,否则会报错。在转换之前可以通过instanceof来检查。
fina关键字,可以用来修饰类、成员变量、成员方法。
他的特点是:所修饰的类不能被继承,所修饰的方法不能被重写,所修饰的变量是一个常量,其值只能设置一次
static关键字,被static修饰的成员变量可以被奔雷所有对象共享,为了降低风险,可以同时使用final和static来修饰成员变量
抽象类
在子类中,抽象方法必须要得到重写
接口,就是提供统一规则,规范。其里面的成员方法默认(public abstract)
接口不能被实例化,需要创建子类对象来完成实例化操作。
如果接口的子类是抽象类的话,则不需要重写接口中的抽象方法
Scanner函数中,.nextInt()录入的是整数,.nextLine()录入的是字符串(以换行符结束),.next()录入的是字符串(以空白字符结束,包括换行符,空格,tab键)
sc.hasNextXxx()//判断下一个录入的数据类型(hasNextInt()就是判断下一个录入的是否是整数)
一些关于类对象的函数:
Object类
.hashCode()//返回的是哈希码值(多被重写后使用)
.getClass()//返回的是字节码文件对象
.toString()//返回字符串表现形式,@后面打印出来的是地址值(多被重写后使用)
Object1.equals(Object2)//比较的是两个对象的地址值(多被重写后使用)
String类
.equals()//区分大小写,判断字符串是否相等
.equalsIgnoreCase()//不区分大小写,判断字符串是否相等
.startsWith(String)//判断字符串是否以String开头
.isEmpty()//判断字符串是否为空
.charAt( i )//获取第 i 个位置的字符
.indexOf( ' c ' )//获取字符c第一次出现的索引位置
.lastIndexOf( ' c ' )//获取字符c最后一次出现的索引位置
.substring( n )//截取从索引 n 开始的所有元素
.substring( n , n1 )//截取从索引n开始到第n1个索引前的字符串(不包含第n1个)
.getBytes()//将字符串转换成字节数组
.replace( 'old' , 'new' )//将所有指定的旧字符(串)替换成i信的字符(串)
.spilt( 'c' )//切删字符串,返回切割后的字符串数据,原字符串里指定的字符会删掉
.trim()//删除字符串两端的空白字符
Date类
.currentTimeMIllis()//获取当前系统时间到参考时间1970年1月1日00:00:00(英国时间)经历了多少毫秒
.Date()//获取当前系统的日期和时间
.Date(Long date)//传递毫秒值,把毫秒值转换为Date日期
.getTime//获取当前系统时间到1970年1月1日00:00:00的毫秒值
.SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")//指定日期的输出格式
.format(Date)//把Date日期格式化为指定的输出格式
.get(Calendar.YEAR/MONTH/DAY)//获取年/月/日的信息(获取月份的数据时0-11个月)
Calender类是一个抽象类,如果要调用它,必须重写它的方法
包装类
装箱,把基本类型的数据转换成引用类型。
拆箱,把包装类型转换成基本类型。
//自动拆装箱
Integer i = 21;//装箱
int c = i;//拆箱
Xxx.parseXxx(String)//可以把字符串转换为Xxx的基本类型(Character类除外)