面向对象

来源:互联网 发布:地税优化营商环境 编辑:程序博客网 时间:2024/06/02 04:16

1.面向对象和面向过程的区别:

 

两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。
区别
1. 编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
2. 封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。
3. 面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。

2.类:

 

类:具有相同特征和共同行为对象的集合。是人类脑海中一个抽象的概念,代表的是一种"共性".
类的组成部分:
属性:外部特征
方法:功能行为。
构造方法:为成员变量初始化。

 

如何定义一个类:

 

[修饰符] class 类名{
//属性
//构造方法
//方法
}

3.如何访问类中成员:

 

类中的成员:属性和方法

 

1.先创建对象(创建实例),使用new关键字创建对象
类名 对象名 = new 类名();
Dog dog = new Dog();

 

访问属性:对象名.属性
dog.name="旺财";

 

访问方法(调用方法)
1.静态方法(使用static修饰方法):类名.方法名()
2.实例方法(非static修饰的方法):对象名.方法名()

4.变量的作用域:

 

变量声明的位置不同会导致其作用域不同。
局部变量:在方法内部声明的变量,其作用域仅限于当前方法使用。
成员变量:在类中声明的属性,其作用域可以在当前类中使用。

 

区别:
1.作用域不同:成员变量的作用域是在整个类体,局部变量的作用域在当前方法
2.是否有默认初始值:成员变量是有默认的初始值,局部变量没有默认初始值。
 eg:int类型默认初始值为0 double类型默认初始值为0.0 boolean类型默认为false String默认为null
3.是否能使用修饰符(public/private/protected/默认):成员变量:可以添加public等修饰符,局部变量不能。
4.在内存中保存的位置不同:成员变量保存到堆中,局部变量保存到栈。

5.构造方法:

构造方法的特征:
1.方法名必须与类名相同
2.没有返回值类型
构造的作用:为成员变量赋初始化值
构造方法也是可以重载的。

如何调用:使用new关键字进行调用。

6.this关键字:

 

this关键字:代表当前对象本身
1.用于区分成员变量和局部变量。
2.可以使用this调用方法或属性.
this.方法名()或this.属性
3.可以使用this调用构造方法,必须作为构造方法的第一行语句。

7.值传递和引用传递:

 

数据类型可以分为基本数据类型和引用数据类型
基本数据类型:
整型: byte,short,int,long
浮点型: float,double
字符型: char
布尔型: boolean
引用数据类型:类,数组和接口

 

如果将基本类型作为方法参数属于值传递:方法执行结束后不会保留执行结果。
如果将引用数据类型作为方法参数,属于引用传递,方法执行结束后会保留执行结果。

8.内存结构:

8.1 栈:

在方法中声明的局部变量保存在栈中,方法执行结束后栈中数据会被回收

8.2 堆:

堆中保存的是对象的信息,使用new关键字创建的对象信息。堆中信息会被java的垃圾回收器回收。

8.3 方法区

方法区保存的是类的信息和静态变量

9.static关键字:

9.1使用static修饰变量:

static修饰的变量为静态变量,类变量
访问方式:类名.变量名(推荐)
对象名.变量名

成员变量和全局变量的区别:
* a.在计算机内存中保存的位置不同:
* 成员变量保存在堆中,全局变量保存在方法区
* b.保存的份数不同
* 成员变量每new一次都开辟空间,保存多份。
* 全局变量只有1份
* c.访问方式不同
* 成员变量:对象名.属性,可以使用this关键字。
* 全局变量:类名.属性(推荐)
* 对象名.属性
* d.创建时间不同:
* 成员变量:只有使用new关键字创建对象时才会在堆中为其分配空间
* 全局变量:在类加载时在方法区中分配空间。

9.2 使用static修饰方法:

 

使用static关键字可以修饰方法:静态方法或类方法
* 特点:静态方法中无法访问非静态的成员变量或方法;但非静态的方法中是可以访问静态的成员
* 访问方式:
* 类名.方法名(推荐)
* 对象名.方法名

9.3  使用static修饰代码块:

 

使用static修饰代码块,静态代码块
* 语法:static{
* //代码
* }
* 执行过程:在类加载时执行静态代码块。静态代码块>普通代码块>构造方法。只会执行1次。
*
* 代码块:使用花括号包含的代码。使用比较少。不需要显式调用。
* 代码块的执行顺序:在创建实例时执行。代码块在构造方法之前执行,并且按照顺序执行,每创建一个对象就会执行1次。执行多次。
*
* 类中代码的执行顺序:
* 静态代码块>代码块>构造方法>静态方法或实例方法。
* 静态的方法中只能访问静态变量, 非静态的方法可以访问静态或非静态的变量

10.package和import关键字:

package:

package关键字主要用于声明包。
java中的包:类似文件夹
*作用:1.分门别类进行存放数据,方便分类和管理。2.避免命名冲突。
*包的命名规范:所有字母都是小写,多级包名之间利用.进行分割
* 常见命名:顶级域名.一级域名.项目名.功能包名
* 顶级域名:com(company)公司,cn(china):中国大陆 ,hk:中国香港 ,tw:中国台湾,org:组织结构,edu:教育,net:网络服务机构...
* 一级域名:badu,bjsxt,zzsxt
* cn.zzsxt.oa.test
*java中常见的包: java.lang包之外的其他包下的类,使用时需要导包。
* java.lang包:java核心类库,String,System,Math... 该包下的类可以直接使用,无需导包。
* java.util包:工具类。 Arrays,Scanner...
* java.io包:i(input)/o(output)和java中流的输入和输出相关的类库。
* java.net包:网络编程相关的类库。
* java.sql包:与数据库操作相关的类库。
* java.text包:国际化或格式化输出相关的类库。
* java.awt包/javax.swing包:图形化界面相关的类库
*
*声明包:使用package关键字,必须放在该类的第一行。
*语法: package 包名; eg:cn.zzsxt.oop7;

import:

导入包: import关键字,在使用非当前包下的其他包下的类时需要导包
*导包快捷键:ctrl+shift+o;
* 方式一: import 包名.*;将整个包导入。 eg: import cn.zzsxt.oop6.*;
* 方式二(推荐): import 包名.类名; eg:import cn.zzsxt.oop6.TestStatic;
*
*直接使用全类名进行访问: 包名.类名;
*cn.zzsxt.oop6.TestStatic testStatic = new cn.zzsxt.oop6.TestStatic();
*特殊场景:不同的包下存在相同的类名。
* import java.util.*;
import java.sql.*;
java.util.Date date = new java.util.Date();

 

静态导入:

 

package cn.zzsxt.oop7;
//import static java.lang.Math.*;
import static java.lang.Math.PI;
import static java.lang.Math.random;
/**
* 静态导入:JDK1.5之后的新增特性。
* 语法: import static 包名.类名;
* 作用:如果使用静态导入某个类或类中属性和方法,可以直接使用该类中的静态属性或静态方法。
*/
public class StaticImport {
public static void main(String[] args) {
// System.out.println(Math.PI);
// double rand = Math.random();
// System.out.println(rand);
System.out.println(PI);//使用java.lang.Math类中的静态属性
System.out.println(random());//使用java.lang.Math中的静态方法
}
}

原创粉丝点击