一,什么是面向对象?谈谈你对面向对象的理解
什么是面向对象?
对比面向过程,是两种不同的处理问题的角度
面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么
比如:洗衣机洗衣服
面向过程会将任务拆解成一系列的业骤(函数),1、打开洗衣机……>2、放衣服…>3、放洗衣粉.…4、清洗--->5、烘干
面向对象会拆出人和洗衣机两个对象:
人:打开洗衣机 放衣服放洗衣粉
洗衣机:清洗烘十
从以上例子能看出,面向过程比较直接高效,而面向对象更易于复用、扩展和维护
面向对象
1.封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项
内部细节对外部调用透明,外部调用无需修改或者关心内部实现
1)javabean的属性私有,提供getset对外访问,因为属性的赋值或者获取逻辑只能由iavabean本身决定。而不能由外部胡乱修改
private string name;
public void setName(string name){
this.name ="tuling_"+name ;
}
该name有自己的命名规则,明显不能由外部直接赋值
2)orm框架
操作数据库,我们不需要关心链接是如何建立的、sql是如何执行的,只需要引入mybatis,调方法即可
2.继承:继承基类的方法,并做出自己的改变和/或扩展
子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的
3.多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
多态的三要素:继承 方法重写 父类引用指向子类对象
父类类型 变量名=new 子类对象;
变量名.方法名();(调用的是子类的方法)
无法调用子类特有的功能(只能调用子类中重写父类的方法,若是子类独有,则不能在多态中使用)
二.JDK JRE JVM三者的区别和联系
JDK:
Java Develprment kil java 开发工具
JRE:
Java Runlirne Environmenl java运行时坏境
JVM:
Java Virlual Machine java 虚拟机(编译class文件)
从上图中我们可以看出,JDK中包含了JRE,JRE中又包含了JVM。我们编写的java文件通过java工具javac 编译为class文件,class文件在jvm中,通过调用lib库来使程序运行起来。
三.==和equals
==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
equals:object中默认也是采用==比较,通常会重写
public boolean equa1s(object obj) {
return(this == obj);
}
String 也会重写equals方法
public boolean equals(object anobject){
if(this == anobject){
return true;
}
if(anobject instanceof string){
String anotherstring =(string)anobject;
int n= value.length;
if(n== anotherstring.value.length){
char v1[]= value;
char v2[]= anotherstring.value;
int i = 0;
whi1e(n--!=0){
if(v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
上述代码可以看出,String类中被复写的equals()方法其实是比较两个字符串的内容。
下来看一道题
public class EqualsDemo {
public static void main(String[] args) {
String a = new String("ab");
String b = new String("ab");
String aa = "ab";
String bb = "ab";
System.out.println("aa==bb: " + (aa == bb));
System.out.println("a==b: " + (a == b));
System.out.println("a.equals(b): " + (a.equals(b)));
System.out.println("42 == 42.0 : " + (42 == 42.0));
}
}
运行结果
aa==bb: true
a==b: false
a.equals(b): true
42 == 42.0 : true
说明:
String中的 equals方法是被重写过的,因为 Object的 equals方法是比较的对象的内存地址,而 String的 equals方法比较的是对象的值。
当创建 String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String对象。