第五章:面向对象2

内存结构


方法区

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

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

方法区

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

static关键字
使用static修饰变量
使用static修饰方法
使用static修饰代码块

使用static修饰变量

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

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

使用static修饰方法

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

使用static修饰代码块

使用static修饰代码块,静态代码块
* 语法:static{
* //代码
* }
* 执行过程:在类加载时执行静态代码块。静态代码块>普通代码块>构造方法。只会执行1次。

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

package和import关键字
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中的静态方法
}
}

时间: 2024-10-22 16:44:14

第五章:面向对象2的相关文章

C++primer第十五章. 面向对象编程

面向对象编程基于三个基本概念:数据抽象.继承和动态绑定. 15.1. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism). 之所以称通过继承而相关联的类型为多态类型,是因为在许多情况下可以互换地使用派生类型或基类型的“许多形态”.正如我们将看到的,在 C++ 中,多态性仅用于通过继承而相关联的类型的引用或指针. 继承 派生类(derived class)能够继承基类(baseclass)定义的成员,派生类可以无须改变而使用那些与派生类型具体特性不相关的操作,派生类可以

Python之旅.第五章.面向对象 4.12

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 13.0px "PingFang SC"; color: #000066; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 13.0px Courier; color: #000066; background-co

第五章 面向对象编程设计与开发——续3

5.9--封装 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅是一种变形操作 #类中所有双下划线开头的名称如_x都会自动形成:_类名_x的形式: class A: _N=0#类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如_N,会变形为_A_N def _init_(self): self._x=10#变形为self._A_X def _foo(self):#变形为_A_foo print('form A') def bar(s

第五章.面向对象(上)

类:可被认为是一种自定义的数据类型,可使用类来定义变量,所有使用类定义的变量都是引用变量,所有的类是引用类型. Java程序使用类的构造器来创建该类的对象. Java支持面向对象的三大特征:封装.继承.多态: java提供了private.protected.public访问控制修饰符来实现封装,提供extends关键字让子类继承父类,有了继承就有了多态. 构造器用于对类的实例进行初始化操作,构造器支持重载,若多个重载构造器里包含了相同的初始化代码,可以把这些初始化代码放置在普通初始化块里完成,

第五章 面向对象(二)

5 面向对象的特征 封装 继承 多态 5.1 封装    隐藏对象的属性和实现细节,仅对外提供公共访问方式    好处: 便于使用 提高重用性 提高安全性 例如:函数(最小的封装体).类.包.框架. 5.2 继承   1.继承的特点 提高了代码的复用性. 类和类之间之间产生了关系,从而有了多态的特性. java只支持单继承,以为多继承容易带来安全隐患:当多个父类中定义了相同功能,但功能内容不同时,子类对象不确定运行哪一个.但是java保留了这种机制,用接口来完成多实现. java支持多层继承.

第五章.面向对象.总结

面向对象编程 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流程化.进而简单化 缺点:可扩展性差 2.面向对象 核心"对象"二字,对象指的是特征与技能的结合体, 基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种 上帝式的思维方式 优点:可扩展性强 缺点:编程的复杂度高于面向过程 对象与类 1.对象是特征与技能的结合体,那类就是一

第五章 面向对象编程设计与开发——续

5.1   类.实例.属性.方法详解 类的语法 上面的代码其实有问题,属性名字和年龄都写死了,想传名字传不进去. class Person(object): def __init__(self, name, age): self.name = name self.age = age p = Person("Alex", 22) print(p.name, p.age) 为什么有__init__? 为什么有self? 此时的你一脸蒙逼,相信不画个图,你的智商是理解不了的! 画图之前, 你

第五章 面向对象编程设计与开发——续2

5.4--小结 从代码级别看面向对象 1.在没有学习类这个概念时,数据和功能是分离的 def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name) conn=connect(host,port,db,charset) conn.call_proc(sql) return xxx #每次调

第二十五章 面向对象------封装、内置函数、反射、动态导入

1.封装 什么是封装? 1.对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口 注意:封装有隐藏的意思,但不是单纯的隐藏 学习封装的目的:就是为了能够限制外界对内部数据的访问 python中属性的权限分为两种: 1.公开的 没有任何限制,谁都可以访问 2.私有的 只有当前类本身能狗访问 默认为公共的 为什么要封装? 1.提高安全性 封装属性 2.隔离复杂度 封装方法 一个类中分为两种数据:属性和方法 封装属性 class Student: def __init__(self,name,ag

第五章 面向对象

1.简述面向对象和面向过程的区别和联系? 两者都是软件开发思想,先有面向过程,后有面向对象.在大型项目中,针对面向过程的不足推出了面向对象开发思想.比喻面向过程是蛋炒饭,面向对象是盖浇饭.盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性.饭不满意就换饭,菜不满意换菜.用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低.区别编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类.属性及其方法,然后通过实例化类.执行方法来完成功能.封装性:都