Java教程

Java面向对象

本文主要是介绍Java面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、面向对象基本概念


其本质是以建立模型体现出来的抽象思维过程和面向对象的方法(百度百科)
是一种编程思维,也是一种思考问题的方式

如何建立面向对象的思维呢?
1、先整体,再局部
2、先抽象,再具体
3、能做什么,再怎么做

2、类与对象
类:类是一种分类,一个类别,一个模板,它描述一类对象的行为和状态,是一组具有相同特性(属性)与行为(方法)的事物集合
对象:是一个个性的产物,是一个个体的特征,是类的一个实例,有状态和行为

3、类和对象的定义格式
类的定义:
class 类名称{
属性名称;
返回值类型 方法名称(){}
}

对象的定义
一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称 对象名称 = new 类名称() ;

如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:
访问类中的属性:对象.属性 ;
调用类中的方法:对象.方法();

在java中对象声明有两种含义
声明对象:Horse horse= null; ; //表示声明了一个对象,但是此对象无法使用,horse没有具体的内存指向
实例化对象:horse= new Horse() ;// 表示实例化了对象,可以使用

horse.eat(); //通过对象调用方法
new Horse().eat();//匿名对象调用方法

4、对象与内存分析

new 关键字表示创建一个对象
new 关键字表示实例化对象
new 关键字表示申请内存空间
注意:如果使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPointerException

1)new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。


(2)一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上而外的对象隐性数据所占的大小。


(3)相同的类型才可以赋值


(4)不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。


(5)编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null


(6)当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM 的 GC 程序认为是垃圾对象,从而被回收

5、封装性


封装性的概念


封装性是面向对象思想的三大特征之一,封装就是隐藏实现细节,仅对外提供访问接口。实现细节部份包装、隐藏起来的方法。
封装有:属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…
封装的好处:模块化、信息隐藏、代码重用、插件化易于调试、具有安全性
封装的缺点:会影响执行效率

封装之前:属性都可以直接访问和修改
class Person{
  String name;
  int age;
}

封装之后:
class Person{
  //属性是成员变量,私有化属性,使得其他对象不能直接访问属性
  private String name;
  private int age;
  //参数及方法内定义的变量是局部变量
  public void setName(String name){
  this.name = name;}
  public String getName(){
  return name;}
}

成员变量和局部变量的区别
a、在类中的位置不同
成员变量:在类中定义
局部变量:在方法中定义或者方法的参数
b、在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
c、生命周期不同
成员变量:随着对象的创建而存在,随着对象的销毁而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
d、初始化值不同
成员变量:有默认初始化值,引用类型默认为null
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

 

6、构造方法


无参构造方法:
public Dog(){} //如果一个类没有定义构造方法,则默认无无参构造,如果有定义有参构造,最好再显示定义一个无参构造方法

带参构造方法:
public Dog(String name){
this.name = name;
}

多参构造方法:
public Dog(String name,int age){
this.name = name;
this.age = age;
}

(1)构造方法名称与类名相同,没有返回值声明(包括 void)


(2)构造方法用于初始化数据(属性)


(3)每一个类中都会有一个默认的无参的构造方法


(4)如果类中有显示的构造方法,那么默认构造方法将无效


(5)如果有显示的构造方法,还想保留默认构造 方法,需要显示的写出来。


(6)构造方法可以有多个,但参数不一样,称为构造方法的重载


(7)在构造方法中调用另一个构造方法,使用this(...),该句代码必须在第一句。


(8)构造方法之间的调用,必须要有出口。


(9)给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留。


(10)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)

(11)private Dog(){},构造方法私有化,当我们的需求是为了 保正该类只有一个对象时(单例模式就是私有化构造器)。

面向对象三大核心

1.继承性

2.封装性

3.多态性

这篇关于Java面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!