Java面向对象入门
Java面向对象入门
一、Java面向对象的基本组成
- Java类及类的成员:属性、方法、构造器;代码块、内部类
- 面向对象三大特征:封装、继承、多态(抽象)
- 关键字:this、super、static、final、abstract、interface、package、import...
二、面向对象的分析思路与步骤
- 根据问题需要,选择问题所针对的现实世界中的实体
- 从实体中寻找解决寻找问题相关的属性和功能,抽象成类
- 将抽象的类用计算机语言描述,形参计算机的类
- 将类实例化成计算机中的对象,对象是计算机解决问题的最终工具
小例子:
大象放进冰箱
人{
打开(冰箱){
冰箱.开开();
} 抬起(大象){
大象.进入(冰箱)
}
关闭(冰箱){
冰箱.关闭()
}
}
冰箱{
开开(){}
关闭(){}
}
大象{
进入(冰箱){
}
}
三、设计类
设计类就是设计类的成员,成员有属性和方法。
属性 = 成员变量 = field = 域、字段
方法 = 成员方法 = 函数 = method
创建类的对象 = 类的实例化 = 实例对象
1.类和对象的使用
- 创建类,设计类的成员
- 创建类的对象
- 通过
对象.属性或对象.方法调用对象的结构
2.对象的内存解析
先简单了解几个概念
- 堆(Heap):目的是存放对象实例,几乎所有的对象实例都在此处分配内存
- 栈(Stack):通常说的栈是指虚拟机栈,用于存储局部变量等。方法执行完,自动释放
- 方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即使编辑器编译后的代码等数据。
Person类:
class Person{
// 属性
String name;
int age = 1;
boolean isMale;
// 方法
public void eat(){
System.out.println("人可以吃饭");
}
public void sleep(){
System.out.println("人可以睡觉");
}
public void talk(String language){
System.out.println("说的是:"+language);
}
}
Main入口:
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "Sour";
p1.isMale = true;
Person p2 = new Person();
Person p3 = p1;
}
}
Person p1 = new Person();
在堆空间中声明了一个Person对象,在栈空间中声明了一个变量p1,并将Person对象的首地址赋值给了变量p1。(name,isMale等属性是在堆空间中的)
Person p2 = new Person();
在堆空间中又声明了一个新的Person对象,并赋值给变量p2,两个对象互不干扰
Person p3 = p1;
在栈空间声明了一个变量p3,将p1的地址值赋值给p3,相当于p3与p1指向了堆空间中的同一个对象。
四、类中属性的使用
属性分为:成员变量 局部变量
相同点:
- 定义变量的格式:数据类型 变量名 = 变量值
- 先声明后使用
- 都有对应的作用域
不同点:
在类中声明的位置不同
成员变量:直接定义在类的一对
{}内局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部变量
权限修饰符的不同
成员变量:可以在声明属性时,指明权限,使用权限修饰符
局部变量:不可以使用权限修饰符
常用的权限修饰符:
private、public、缺省(默认不写即缺省)、protected默认初始化值
成员变量:类的属性,根据类型都有默认初始化值
整型(byte/short/int/long):0
浮点型(float/double):0.0
字符型(char):0
布尔型(boolean):false 引用数据类型(类、数组、接口):null
局部变量:没有默认初始化值(Python可以设置默认初始化值)
调用之前必须要显式赋值
在内存中加载的位置不同
成员变量:加载到堆空间中
局部变量:加载到站空间中
五、类中方法的声明和使用
方法的声明:权限修饰符 返回值类型 方法名(形参列表){ 方法体
}
如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要return关键字返回指定类型的变量或者常量,如果方法没有返回值,声明方法时用void来表示。没有返回值时使用return表示结束此方法
注:方法中不能定义方法(没有函数的概念)
六、jvm内存结构

方法区是所有线程共享的内存区域.
java栈、本地方法栈和程序计数器是运行是线程私有的内存区域
Java堆(Heap):
Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
方法区(Method Area)
是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
程序计数器(Program Counter Register)
占用内存空间较小,可以看做是当前线程所执行字节码的行号指示器
栈(Stacks)
线程私有的,它的生命周期与线程相同。描述的是Java方法执行的内存模型,每个方法被执行都会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法被调用执行完成,就是一个入栈到出栈的过程。
本地方法栈
虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
Java面向对象入门的更多相关文章
- java面向对象入门(1)-入门介绍
在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象.封装.继承和多态性.它们也被称为面向对象编程范式的四大支柱. _抽象_是在不考虑无关细节的情况下公开实体基本细节的过 ...
- java面向对象入门(3)-java构造方法
Java构造函数是特殊的方法(没有返回类型),使您可以在应用程序内部的其他类使用对象之前完全初始化对象状态.Java中的构造方法是使用new关键字调用的.下面让我们更深入地了解构造函数. 1.什么是j ...
- Java面向对象入门(2)-访问修饰符
Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...
- java面向对象入门之方法参数的传递
/* Name : Power by :Stuart Date:2015.4.25 */ class PassOn{ //创建show方法,把i传入,输出i+1的结果 public void show ...
- java面向对象入门之带参方法创建
/* Name :创建带参的方法 Power by :Stuart Date:2015.4.25 */ //创建Way类 class Way{ //Way类成员的基本变量 int add1=123; ...
- java面向对象入门之创建类
/* Name:如何创建类的实例 Power by Stuart Date:2015-4-23*/ //一个bike测试类 public class bikeTest{ //bike 一个变量 Str ...
- Java实例 Part5:面向对象入门
目录 Part5:面向对象入门 Example01:成员变量的初始化值 Example02:单例模式的应用 -----懒汉式 -----饿汉式 Example03:汉诺塔问题的求解 Example04 ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- JavaSE入门学习24:Java面向对象补充
一Java中的Object类 Object类是全部Java类的父类.假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认 继承Object类. public class ...
随机推荐
- 数据库-io检测工具sqldeveloper-18.2.0.183.1748-x64 下载链接
链接:https://pan.baidu.com/s/1R0ujc_9aXdc5O5i1nhNAlA 提取码:o6is
- LearnOpenGL笔记(1)搭建环境
之前有写过Unity Shader,但不过是东拼西凑,对其中的原理可以说完全不清楚,现在准备好好从opengl开始,学习这基础又重要的内容. LearnOpenGL CN是一个超超超炒鸡好的openG ...
- 架构师小跟班:教你从零开始申请和配置七牛云免费OSS对象存储(不能再详细了)
背景 之前为了练习Linux系统使用,在阿里云上低价买了一台服务器(网站首页有活动链接,传送门),心里想反正闲着也是闲着,就放了一个网站上去.现在随着数据越来越多,服务器空间越来越吃紧,我就考虑使用七 ...
- ASP.NET Core使用Quartz定时调度
在应用程序开发过程中,经常会需要定时任务调度功能,本篇博客介绍Asp.net Core如何使用Quartz完成定时调度 一.Quartz使用步骤 创建调度器scheduler,并开启 创建Job作业 ...
- Windows 10 蓝牙管理页面"添加蓝牙或其他设备"选项点击无响应的解决方案
解决方案1(简单,但不解决根本问题): 通过"控制面板→设备和打印机→添加设备"进行添加. 解决方案2: 造成这种现象的原因应该是因为启用了 Administrator 账户,在其 ...
- 安装Python,输入pip命令报错———pip Fatal error in launcher: Unable to create process using
今天把Python的安装位置也从C盘剪切到了D盘, 然后修改了Path环境变量中对应的盘符:D:\Python27\;D:\Python27\Scripts; 不管是在哪个目录,Python可以执行了 ...
- curl模拟多线程
1.curl发送请求的请求的基本思路 打开会话 设置会话参数 发送请求 关闭句柄 2.curl单进程发送示例 <?php //请求链接 $arr = [ 'https://www.yahoo.c ...
- sass的入门(安装以及sublime中如何编译sass)
很久之前就听到了sass和less,但是因为人懒(默默吐槽下自己),就没有去了解相关的知识.但是身为一个前端人员不了解sass好像有点low low 的,所以现在开始接触使用sass了. 万事开头难, ...
- opencart卸载语言包要记得在后台进行设置否则会出错
今天ytkah在一个项目中把中文包卸载了,但是前端购买按钮变为空了,研究了一遍发现要把system - localisation - languages中的对应语言删除才可以.正确的卸载语言步骤是1. ...
- Python 文件读写操作实例详解
Python提供了必要的函数和方法进行默认情况下的文件基本操作.你可以用file对象做大部分的文件操作 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前 ...