Java教程

java面向对象编程

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

最大特点在于面向对象的编程设计

面向对象主要这几模式为模块化设计,可以进行从用配置。在整个面向对象的设计里面更对情况下考虑的是标准。在使用的时候根据标准进行拼装,而对于面向对象有3个特征

       封装性:内部的操作对外部而言不可见,内部操作都不可直接使用的时候才是最安全的;

       继承性:在已有结构的基础上继续进行功能的扩充;

       多态性:是在继承的基础上扩充而来的概念,指的是类型的转换处理;

面向对象开发的3个步骤

OOA:面向对象分析

       OOD:面向对象设计

       OOP:面向对象编程

  1. 类与对象

类是对某一类事物的共性的抽象概念,而对象描述的是一个具体的产物。

类是一个模板,而对象才是类可以使用的实例,现有类再有对象

类一般会由连个组成

       成员属性

       操作方法

  1. 类与对象的定义

类是一个独立的结构体,所需要使用class来进行定义,而在类之中主要由属性和方法组成,那么属性就一个个具体的变量

       声明并实例化对象:类名称 对象名称 = new 类名称();

       分步骤完成:声明对象,实例化对象;

获取完实例化对象之后,那么需要通过对象进行类中的操作调用,此时有两种调用方法;

       调用类中的属性:实例化对象.成员属性;

       调用类中的方法:实例化对象.方法名称();

  1. 对象内存分析

Java中类属于引用数据类型,引用数据类型最大的困难在于进行内存管理,同事进行操作的时候和内存关系的变化。进行简单的分析。

如果要进行内存分析,那么首先给出两块最为常用的内存空间:

       堆空间:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new完成的;

       栈内存:保存的是一款堆内存的地址:即通过地址找到堆内存,而后找到对象内容;可以简单的理解为对象的名称保存在栈内存中;

  1. 对象引用传递分析

本质:同一块对内存空间,可以被不同的栈内存所指向,也可以更换指向;

实例化对象是(内存地址、数值)

引用传递可以发生在方法上,这个时候一定要观察方法的参数类型,同时要观察方法的执行过程。

  1. 引用垃圾参数

如果堆内存引用传递处理不当,会造成垃圾的产生。

所谓的垃圾空间指的就是没有任何栈内存所指向的堆内存空间,所以的垃圾将被GC不定期进行回收并且释放无用的内存空间。垃圾过多,将影响GC的处理性能,开发中产生越少越好;

  1. 成员属性封装

一般方法都是对外提供服务的,所以不会有较高的安全线,所以往往需要对其进行保护,这个时候就需要采用封装性对属性进行保护。

在默认情况下,对于类中的属性是可以通过其他类利用对象进行调用的。此时可以利用private关键字对属性进行封装处理;而属性一旦封装后外部不能直接访问,但是对类的内部是可见的,如果想访问封装的属性,则java开发标准提供如下要求:

       设置或者获取属性(get/set)get***;set***;

  1. 构造方法和匿名对象

可以通过构造方法实现实例化对象中的属性初始化处理;

  1. this调用本内属性

在以后所编写的程序代码中,只要是访问奔雷中的属性的时候,请一定加上“this”

12.static属性

进行类设计的时候首选的一定是非static属性(95%),而考虑到刚刚信息的储存的时候才会用static属性。Static属性必须在实例化对象产生之后才可以使用,而static属性可以在没有实例化对象的情况下直接通过类名称访问。

14.static应用

实例化对象个数统计,没一次创建新的实例化对象都可以实现一个统计操作;

class Book {

       private String title;

       private static int count = 0;

       public Book(){}

       public Book(String title){

              this.title = title;

              count++;

              System.out.println("这是新创建的第"+count+"书");

       }

       public String  getTitle(){

              return this.title;

       }

}

public class Demo {

       public static void main(String args[]) {

              System.out.println(new Book("java").getTitle());

              System.out.println(new Book("jsp").getTitle());

              System.out.println(new Book("sql").getTitle());

       }

}

15.普通代码块

26.增强for循环(foreach)

For(数据类型 变量:集合){}

41.String字符串

使用“”定义,用+号连接,用jvm制造的简单可以使用的数据类型,可以直接赋值;字符串中每个字符数据保存在数组中;

Jdk1.8String保存的是字符数组;jdk1.9String保存的是字节数组;

Private final char value[];        Private final byte[];  

字符串就是数组的一种特殊包装应用,但是同时清楚它是无法改变的;

两种对象的实例化形式:直接赋值,构造方法;

42.字符串比较

使用“==”的关系表达式,但是不准确;

可以equals实现字符串的比较;

==:进行的是数值比较,如果对象的比较上比较的是两个内存的地址的数值;

equals:是类所提供的一个比较方法,可以直接进行字符串内容判断;

44.直接赋值的特点可以自动将对象保存到对象池之中;

String类两种对象实例化凡是区别

       直接赋值:只会参生一个实例化对象,并且可以保存在对象池中,已实现该字符串实例的重用。

       构造方法:会参生两个实例化对象,并且不会保存在对象池中,无法实现对象复用,但是可以利用intern()方法手工入池处理。

46.String内容保存

String不可修改

由此可以发现整个处理过程中,字符串常量内容并一个月任何的引用,并且这种改变将有可能带来大量的垃圾空间。不要频繁修改String的内容

47.java主方法组成

       Public static void main(String args[]){}

       Public:描述访问权限;

       Static:程序的执行是通过类名称完成的,所以此方法是由类直接调用;

       Void:主方法是一切的起点,一旦开始就没有返回的可能;

       Main:系统定义好的名称;

       String args[]:字符串的数组,可以实现程序启动的接收;

49.字符串与字符

Jdk1.9以前String都利用了字符数组实现了包装处理,所以String包含构造方法和普通方法两类;

No

方法名称

类型

 

01

Public String (char[] value)

构造

将传入的字符数组变成字符串

02

Public String(char[] value,int offset,int count)

构造

将传入的部分字符数组变成字符串

03

Public char charAt(int index)

普通

获取指定索引位置的字符

04

Public char[] toCharArray()

普通

将字符串中的数据已字符数组的形式返回

 

50字符串与字节

No

方法名称

类型

 

01

Public String (byte[] bytes)

构造

将传入的字符数组变成字节

02

Public String(byte[] value,int offset,int count)

构造

将传入的部分字符数组变成字节

03

Public byte getByte ()

普通

将字符串转换为字节

04

Public byte []getByte (String charsetName)throws nseupportedEncodintException

普通

编码转换

 

51字符串比较

No

方法名称

类型

 

01

Public boolean equals(String anObject)

普通

区分大小写比较

02

Public boolean equalsIgnoreCase(String anObjectString)

普通

不区分大小写比较

03

Public int compare(String anObjectString)

普通

进行字符串大小比较,该方法会返回int类型数据,3种取值:大于(>0),小于(<0),等于(=0)

04

Public int compareIgnoreCase(String anObjectString)

普通

不区分大小写进行字符串大小比较

 

53.字符串替换

No

方法名称

类型

 

01

Public String replaceAll(String regex,String replacement)

普通

替换全部

02

Public String replaceFirst(String regex,String replacement)

普通

替换首字母

 

54.字符串拆分

No

方法名称

类型

 

01

Public String[] split(String regex)

普通

按照指定字符串全部拆分

02

Public String replaceFirst(String regex,int replacement)

普通

按照指定字符串拆分为指定个数

 

55.字符串截取

No

方法名称

类型

 

01

Public String substring(int beginIndex)

普通

从指定索引截取到结尾字符串

02

Public String substring(int beginIndex,int endIndex)

普通

截取指定索引范围字符串

 

56.字符串格式化

No

方法名称

类型

 

01

Public static String format(String format,各种类型)

普通

根据指定结构进行文本格式化显示

 

57字符串格式化

No

方法名称

类型

 

01

Public static concat(String str)

普通

描述字符串的连接

02

Public String intemperate();

普通

字符串入池

03

Public boolean isEmpty();

普通

判断是否为空字符串

04

Public int length();

普通

计算字符串长度

05

Public String trim();

普通

驱逐左右空格

06

Public String toUpperCase();

普通

转大写 非字母不转

07

Public String toLowerCase ();

普通

转小写 非字母不转

 

59.继承的实现

使用extends关键字

无论你如何折腾,在实例化子类对象的同时一定会实例化父类对象。

只要是在子类中调用父类方法的时候一定要在方法前追加有“super.方法”。

 

65.final关键字

在java中使用final关键字,可以实现定义不能被继承的类和不能被覆写的方法,常量。

 

78.object

解决参数的统一问题,使用object类可以接受所有数据类型。

Java中object不存在继承关系,所有类都是object的子类,因此使用object类可以接受所有子类对象;

 

79.获取对象信息

Object对象获取一个对象的完整信息:public String toString();

 

84.包装实现及原理

Number是一个抽象类

Jdk1.5之后提供自动支持功能,到jdk1.9之后为了滚股此概率。将包装类的构造方法都设置为过期定义了;

Object对象可以接受任何数据类型的数据,包装对象可以直接参与数学运算;

但是object对象不能直接获取,需要向上赋值((数据类型)obj)

 

86.接口的定义

接口可以理解为一个纯粹的抽象类,从jdk1.8后,引入Lambda表达式的概率,所以接口的定义也得到了加强,处理抽象方法与全局常量,还可以定义普通方法和静态方法。

 

95.泛型jdk1.5,其主要目的为了解决ClassCastException的问题,在进行对象的向下转型时永远都可能存在安全隐患,而java希望通过泛型可以 慢慢解决此类问题

泛型问题的出现,描述x和y坐标的处理类,并且这个类中国允许开发者保存

整数数据:x=10,y=20;

浮点型数据:x=10.1,y=20.1;

字符串型数据:x=”东经10度”,y=”北纬20度”;

于是利用设计Point类的时候就需要去考虑具体的x和y属性的类型这时类型要求就可以利用object类进行定义,因为存在有如下的转型关系;

整数数据:基本数据类型->包装为Integer类对象->自动向上转型为object

浮点型数据:基本数据类型->包装为doule类对象->自动向上转型为object

字符串型数据:string类对象->自动向上转型为object

 

97.

 

 

 

 

 

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