目录
一、面向对象的初步认知
1、面向对象关注的三点:
举个生活中的例子来帮助理解:对于洗衣服来说,
面向过程:倒水 -> 放衣服 -> 加洗衣液 -> .....->拧干衣服
面向对象:人 将衣物与洗衣液一起放入洗衣机
整个过程是人、衣服、洗衣液、洗衣机四个对象之间交互完成,人不需要关心衣物是如何洗的
2、Java是一门纯面向对象的语言(Object Oriented Program,即OOJ),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来设计程序,更符合人们对事物的认知。
二、类的定义和使用
1、理解类
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。
2.定义类
(1)使用关键字class创建类,类中包含成员变量和成员方法
(2)使用关键字new实例化一个对象
(3)类相当于一个图纸,实例化对象相当于把房子建出来
(4)使用类名.属性来赋值,使用类名.方法来调用方法
举例:
class Person{
public String name;//属性(成员变量)
public int age;
public void sleep(){ //方法(成员方法)
System.out.println("睡觉");
}
public void eat(){
System.out.println("吃饭");
}
}
public class TestDemo {
public static void main(String[] args) {
Person person = new Person(); //通过new关键字实例化多个对象
}
}
当成员变量没有赋初值的时候,每个成员变量都是它所对于的0值,程序运行不会报错。
(1)引用类型对应的是null
(2)boolean对应的是false
(3)char对应的是\u000,是Unicode编码对应的空格
三、构造方法
当我们实例化一个对象的时候,一定会有这两部,但不一定只有这两步
1.构造方法作用:
是用来帮成员变量进行初始化的,构造方法是一种特殊的成员方法
2.构造方法的特性
(1)方法名必须和类名相同
(2)没有返回值
3.构造方法的重载
(1)当我们没有写构造方法时,编译器会帮我们默认提供一个不带参数的构造方法
例如:
(2)构造方法的重载以及应用
使用构造方法进行初始化
4.打印对象的属性
方法一:自己写一个show()方法
方法二:使用自带的toString
(1)右键,选Generate
(2)选择toString
写了toString
如果我们不写toString,系统就会调用默认的Object类的toString方法,就会变成这样
四、this的使用
1.this.data; //访问属性
2.this.func(); //访问方法
3.this(); //调用本类中其他构造方法
详情见博客
http://t.csdn.cn/lC9kE
五、封装
1、概念
面向对象程序三大特性:封装、继承、多态。类和对象阶段,主要研究的是封装特性,封装简单来说就是套壳屏蔽细节。
比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU、显卡、内存等一些硬件元件。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
2、访问修饰限定符
(1)private:只能在当前类中访问
比如
如果我们想要在类外使用,就需要一个公开的方法来调用
此时我们就实现了封装,对类的实现细节进行隐藏,对外只提供公开的方法来供你使用,提高了数据的安全性。
(2)public:哪里都能访问
(3)protected:受保护的(在继承中会了解)
(4)什么都不写
class Student{
int age; //默认的:包访问权限
}
3.包
(1)什么是包??
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。
包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一
个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
(2)导包
import java.util.Arrays;
import java.util.Date;
public class TestDemo2 {
public static void main(String[] args) {
Date date = new Date(); //导入import java.util.Date;
System.out.println(date.getTime());
java.util.Date date1 = new java.util.Date();//也可以直接写,不使用import
int[] array = {1,2,3};
System.out.println(Arrays.toString(array));//导入import java.util.Arrays;
}
}
(3)使用import static导入包中静态的方法和字段(不建议这样使用)
import static java.lang.Math.*;
public class TestDemo2 {
public static void main(String[] args) {
//double result = Math.sqrt(Math.pow(3, 2) + Math.pow(4, 2));
double result = sqrt(pow(3, 2) + pow(4, 2));//可以省略Math.
}
}
(4)自定义包
包名一般是com.公司域名,如www.baidu.com,包名就可以写成com.baidu.www
(5)导入自定义包
(6)包访问权限:在同一个包下都能访问
(7)常见的包