赞
踩
像c语言这种面向过程的编程缺少了可重用性设计,而像Java这种面向对象的编程很好的解决了这一问题,面向对象可以对现实生活进行抽象。
那么什么是面向对象编程?(OOP)
首先需要理解两个抽象的概念名次:类和对象
形象化的来说类就是自行车的设计蓝图
而对象就是照着蓝图制造的一辆辆自行车
而类和对象机制就是面向对象编程
状态 + 行为
(属性) (方法)
面向对象有三大特性:
封装性 继承性 多态性
接下来讲类和对象的一些语法:
一.类
类的组成:
属性(变量,描述每个对象的具体特点)
方法(操作的行为)
构造方法
1)定义类的语法
修饰符(modifier) class 类名称 {
}
public class HelloWorld{
}
2)定义属性的语法
修饰符(modifier) 变量类型 变量名称;
public int age;
没有经过初始化的属性具有默认值,int型的默认值为0,引用类型的默认值为null
属性是在对象开辟堆内存时开辟空间
3)定义方法的语法
修饰符(modifier) 返回值类型 方法名称(形参列表){
实现
}
public static int[] rotate(int[] a,int k){
}
4)定义构造方法的语法
修饰符(modifier) 类名称(形参列表){
}
public Person(){ //无参构造方法
}
如何理解使用构造方法的过程?
1)
计算对象需要的内存大小,开辟空间,初始化为0
2)
调用构造方法,对属性初始化
3)
构造方法调用结束,返回一个指向新对象的引用
Person tmp=新对象;
注意:
1.一个文件中只能有一个public的类
2.构造方法允许重载
3.所谓的构造方法就是使用关键字new实例化新对象时来进行调用的操作方法。
4.方法名称必须和类名称相同
5.构造方法没有返回值类型声明(编译器是根据程序结构来区分普通⽅法与构造⽅法的)
6.每个类中至少存在一个构造方法(没有明确定义,则系统自动生成一个无参结构)
二.对象
构造对象的语法(Create object)
第一种:类名称 变量名称 =new 类名称(实参列表)
第二种:new 类名称(实参列表); //匿名对象
Person p1=new Person();
new Person("张三",20).getPersonInfo();
注意:
1.匿名对象不会有任何的栈空间所指向,所以使⽤⼀次后就成为垃圾空间,所有的垃圾空间会不定期GC,GC会影响性能,所以开发之中⼀定要注意少产生垃圾空间。
2.任何对象都应该有其对应的类
3.new是一个唯一的标记,引用表示开辟一块新的堆内存空间
4.对象(引⽤数据类型)必须在实例化后调⽤,否则会产⽣ NullPointerException (运⾏时错误),编译时不会出错,只有引⽤类型(数组、类、接⼝)才会产⽣此类异常。
5.对象中存储的最主要的就是属性,也可以找到方法区中对象相对应的类。
几个访问的语法:
如何访问对象的属性?
在类的内部:直接通过属性名称访问
在类的外部:引用.属性名称
如何调用对象的方法?
在类的内部:直接通过方法名称访问
在类的外部引用.方法名称(实参列表)
容易混淆的几点:
1.嵌套调用
中间生成很多临时变量,只是没有写出临时变量
System.out.println(Arrays.toString(rotate(new int []={1,2,3})));
相当于:
int[] tmp1=new int[] {1,2,3,};
int[] tmp2=rotate(tmp1,3);
String tmp3=Arrays.toString(tmp2);
System.out.println(tmp3);
2.链式调用
class a{ A a=new a();
public A create() {
return new A();
//A tmp1=new A();
//return tmp1;
}
}
new a().a.a.a.a;
Person p=null;
定义了一个没有指向任何对象的Person类型的引用(类类型的引用)
Person p=new Person(...);
1)定义了一个Person类型的对象
2)定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)
引用类型和指向的对象类型是两回事
三.this关键字的使用
1)在构造方法中调用其他构造方法,调用语句必须出现在第一行
this();
2)通过this访问属性或方法
(一般出现在发生了命名遮挡的时候(name shadowing))
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name ; //
this.age = age ; //构造方法的参数和属性名相同时使用this(防止命名遮挡)
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
3)this代表的就是当前对象的引用(current object)
class Person{ public void print(){ System.out.println("[PRINT]⽅法:"+this); //this代表p2(当前对象的引用) } } public class Test{ public static void main(String[] args) { Person p1 = new Person(); System.out.println("[MAIN]⽅法:"+p1); p1.print(); System.out.println("================="); Person p2 = new Person(); System.out.println("[MAIN]⽅法:"+p2); p2.print(); } }
普通属性和普通方法,其实都绑定着一个隐含的对象
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误输出 stderr 屏幕
封装是⾯向对象⾥最复杂的概念,本篇先初步理解到封装是对信息进行隐藏,使内部操作对外部⽽⾔不可⻅这⼀步即可,阅读完之后的篇章就能进行全面的理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。