面向对象: 1,它是一种符合现实中人们思考习惯的一种思想。 2,它的出现可以将复杂问题简单化。 3,它的出现让程序员的角色从执行者变成了指挥者。 面对对象是相对于面向过程而言的。 面向过程: 强调的是动作,执行过程。 面向对象: 强调的是被操作的事物。 举例: 多窗口的操作:移动,关闭。 面向过程:移动窗口,关闭窗口。 只需要将移动动作完成,关闭动作完成即可。 面向对象:窗口移动,窗口关闭。 先对窗口进行描述,并将移动动作和关闭动作定义在窗口中。 其实面对对象是基于面向过程的。 区别: 以前是程序员指定窗口操作动过, 现在是指挥窗口对象,调用其操作动作。 大象放进冰箱里: 1,打开冰箱。 2,将大象存入。 3,关闭冰箱。 将冰箱描述描述对象,将打开动作,存储动作,关闭动作定义在该冰箱对象中。 只要指挥冰箱做事情即可。并将大象作为参数传入。 面试时: 问:什么是面向对象呢? 答:面向对象的三个理解,举例:面试官其实就是在用面向对象的思想思考问题, 为了提高项目开发效率,你就找到我这个对象,并指挥我这个对象,调用了我的专业编程功能, 来为公司创造价值。 对于面试官您来将,就是一个指挥者,您将项目制作过程简单化。 面对对象还有三大特征:封装,继承,多态。 ----------------------------------- 对象和类的关系: 类其实就是对事物的描述。而对象其实即使该事物实实在在存在的个体。 我们使用计算机语言其实就是为了描述现实生活中的事物(万物皆对象)。 为什么要将事物封装成对象呢? 因为可以在该事物中定义和其相关的属性和行为。方便于指挥这个对象做事情。 体现在程序中,就是开始时,先要想到是否有已有的对象可以完成所需的功能。 如果没有相对应的对象,自己就建立一个对象。以便后期重用。 class Person { int age; String name; public void speak() { System.out.println(name+","+age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.age = 20; p.name = "lisi" p.speak(); } } 匿名对象:其实就是定义对象的简化形式。 1,当对象对应方法进行一次调用的时候,可以使用匿名对象。 2,匿名对象可以作为实际参数进行传递。 ------------------------------------ 封装:其实就是隐藏实现细节。 在程序中,函数就是最小的封装体。 类也是一种封装形式。 包也是一种封装形式。 对于框架SSH,也是封装。 好处:提高安全性。 开发时,不需要对外提供都隐藏起来。 封装的一种体现形式。 class Person { private int age;//私有成员只在本类中有效。这时在其他类中建立对象也访问不到。将age隐藏。 String name; public void speak() { System.out.println(name+","+age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.age = 20;//当建立Person对象后,给年龄age赋值时,因为age是int的,所以可以赋予负数-20. //但这样不符合现实中的情景。出现了安全隐患。产生问题的原因是什么呢? //age直接被访问造成的。为了避免这样的问题,将age私有化。 p.name = "lisi" p.speak(); } } 将成员变量私有化后,通常提供公有方法对其进行访问。 这样做的好处在于,可以在方法中的加入逻辑判断,以增强程序的健壮性。 按照规范,每一个成员变量都会对应set,get方法。 class Person { private int age; private String name; public void setAge(int a) { if(a>130 || a<0) System.out.println("no"); else age = a; } public int getAge() { return age; } public void speak() { } } main() { Person p = new Person(); p.setAge(30); } ----------------------------------- 进制转换: 十进制-->二进制 十进制-->十六进制。 思路: 可以通过查表法来完成转换动作。 无论怎样的进制,取到其中一位都可以将该数据作为角标去查对应的表(数组)。 获取进制中某一位需要通过&运算的形式。 获取每一位,需要通过将原数据进行右移>>>一定的位数。 而且这些动作都需要重复执行。 private static String trans(int num,int base,int offset) { if(num==0) return "0"; char[] chs = {'0','1','2','3' ,'4','5','6','7' ,'8','9','A','B' ,'C','D','E','F'}; //定义一个临时容器来存储每一次查表后的结果。 char[] arr = new char[32]; int pos = arr.length; while(num!=0) { int temp = num & base; arr[--pos] = chs[temp]; num = num >>> offset; } return toString(arr,pos); } priavte static String toString(char[] arr,int pos) { String s = ""; for(int x=pos; x<arr.length; x++) { s = s + arr[x]; } return s; //return new String(arr,pos,arr.length-pos); } /* 十进制-->二进制 */ public static String toBin(int num) { return trans(num,1,1); } /* 十进制-->十六进制 */ public static String toHex(int num) { return trans(num,15,4); }