当前位置:   article > 正文

面向对象编程——类与对象(1)_面向对象编程(一):类与对象

面向对象编程(一):类与对象

像c语言这种面向过程的编程缺少了可重用性设计,而像Java这种面向对象的编程很好的解决了这一问题,面向对象可以对现实生活进行抽象。

那么什么是面向对象编程?(OOP)
首先需要理解两个抽象的概念名次:类和对象
形象化的来说类就是自行车的设计蓝图
而对象就是照着蓝图制造的一辆辆自行车
而类和对象机制就是面向对象编程
状态 + 行为
(属性) (方法)
面向对象有三大特性:
封装性 继承性 多态性

接下来讲类和对象的一些语法:

一.类
类的组成:
属性(变量,描述每个对象的具体特点)
方法(操作的行为)
构造方法
1)定义类的语法
修饰符(modifier) class 类名称 {
}

public class HelloWorld{
}
  • 1
  • 2

2)定义属性的语法
修饰符(modifier) 变量类型 变量名称;

public int age;
  • 1

没有经过初始化的属性具有默认值,int型的默认值为0,引用类型的默认值为null
属性是在对象开辟堆内存时开辟空间
3)定义方法的语法
修饰符(modifier) 返回值类型 方法名称(形参列表){
实现
}

public static int[] rotate(int[] a,int k){
}
  • 1
  • 2

4)定义构造方法的语法
修饰符(modifier) 类名称(形参列表){
}

public Person(){    //无参构造方法
}
  • 1
  • 2

如何理解使用构造方法的过程?
1)
计算对象需要的内存大小,开辟空间,初始化为0
2)
调用构造方法,对属性初始化
3)
构造方法调用结束,返回一个指向新对象的引用
Person tmp=新对象;
注意:
1.一个文件中只能有一个public的类

2.构造方法允许重载

3.所谓的构造方法就是使用关键字new实例化新对象时来进行调用的操作方法。

4.方法名称必须和类名称相同

5.构造方法没有返回值类型声明(编译器是根据程序结构来区分普通⽅法与构造⽅法的)

6.每个类中至少存在一个构造方法(没有明确定义,则系统自动生成一个无参结构)

二.对象
构造对象的语法(Create object)
第一种:类名称 变量名称 =new 类名称(实参列表)
第二种:new 类名称(实参列表); //匿名对象

Person p1=new Person();
  • 1
new Person("张三",20).getPersonInfo();
  • 1

注意:
1.匿名对象不会有任何的栈空间所指向,所以使⽤⼀次后就成为垃圾空间,所有的垃圾空间会不定期GC,GC会影响性能,所以开发之中⼀定要注意少产生垃圾空间。

2.任何对象都应该有其对应的类

3.new是一个唯一的标记,引用表示开辟一块新的堆内存空间

4.对象(引⽤数据类型)必须在实例化后调⽤,否则会产⽣ NullPointerException (运⾏时错误),编译时不会出错,只有引⽤类型(数组、类、接⼝)才会产⽣此类异常。

5.对象中存储的最主要的就是属性,也可以找到方法区中对象相对应的类。

几个访问的语法:

如何访问对象的属性?
在类的内部:直接通过属性名称访问
在类的外部:引用.属性名称

如何调用对象的方法?
在类的内部:直接通过方法名称访问
在类的外部引用.方法名称(实参列表)

容易混淆的几点:

1.嵌套调用
中间生成很多临时变量,只是没有写出临时变量

System.out.println(Arrays.toString(rotate(new int []={1,2,3})));
  • 1

相当于:

 int[] tmp1=new int[] {1,2,3,};
 int[] tmp2=rotate(tmp1,3);
 String tmp3=Arrays.toString(tmp2);
 System.out.println(tmp3);
  • 1
  • 2
  • 3
  • 4

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
Person p=null;
  • 1

定义了一个没有指向任何对象的Person类型的引用(类类型的引用)

Person p=new Person(...);
  • 1

1)定义了一个Person类型的对象
2)定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)

引用类型和指向的对象类型是两回事

三.this关键字的使用

1)在构造方法中调用其他构造方法,调用语句必须出现在第一行

 this();
  • 1

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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();
 }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

普通属性和普通方法,其实都绑定着一个隐含的对象
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误输出 stderr 屏幕

封装是⾯向对象⾥最复杂的概念,本篇先初步理解到封装是对信息进行隐藏,使内部操作对外部⽽⾔不可⻅这⼀步即可,阅读完之后的篇章就能进行全面的理解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1011149
推荐阅读
相关标签
  

闽ICP备14008679号