类和对象

类是某一批对象的抽象,可以把类理解成某种概念。对象是一个具体存在的实体。类和对象是面向对象的核心。

类定义的是多个实例的特征,类不是具体存在,实例才是具体存在。

定义类(class)的语法:

[修饰符] class 类名

{ 零个到多个构造器定义....

零个到多个成员变量....

零个到多个方法....}

要点:1.三种常见的成员:构造器(new关键字调用) 成员变量 方法

   2.类名由一个或多个有意义的词连接而成,每个单词首字母大写,其余小写。

3.修饰符可以是public final abstract或省略

定义成员变量(field)的语法:

[修饰符] 类型 成员变量名 [=默认值];

要点:1.成员变量名第一个单词首字母小写,后面每个单词首字母大写,其余小写。

2.类型可以是基本类型,也可以是引用类型。

定义方法的语法

[修饰符] 方法返回值类型 方法名(形参列表)

{方法体}

要点:方法名和成员变量的规则相同,通常选英语动词。

static是一个特殊的关键字,可修饰方法成员变量等成员。static修饰的成员属于类本身而不属于该类的单个实例,也叫类变量和实例变量(静态变量和非静态变量)。静态成员不能访问非静态成员。

构造器是一种特殊的方法。

[修饰符] 构造器名(形参列表)

{方法体}

要点:构造器名必须与类名相同

类的作用:定义变量  创建对象 调用类方法或访问类变量

对象的产生和使用

创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。

例:Persn p=new Person();//定义p变量的同时为p变量赋值

类或实例访问方法和成员变量的语法:类.类变量|方法   实例.实例变量|方法

static修饰的成员变量,可通过类和实例调用。没有static修饰的方法和成员变量,只能通过实例来调用。

Person p=new Person();   这段代码创建了Person对象,对象赋值给p变量。

person对象赋给一个引用变量的示意图

person类型的变量实际是一个引用,被存放在栈内存里。指向实际的person对象

真正的person对象存放在堆内存中

java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象,当访问p引用变量的成员变量和方法时,实际是访问p所引用对象的成员变量和方法。

对象的this引用

this关键字的最大作用,就是让类中的一个方法,访问该类里的另一个方法或实例变量。

this关键字总是指向调用该方法的对象。

大部分时候,一个方法访问该类中定义的其他方法,成员变量时加不加this前缀效果完全一样。

方法方法不能独立定义,方法必须属于类或对象。

同一个类里的一个方法调用另一个方法时,如被调方法是普通方法,默认使用this作为被调者,如被调方法是静态,默认使用类作为调用者。

java里方法的参数传递只有一种:值传递 将实际参数的副本传入方法内而参数本身不受影响。

参数副本分为基本类型的参数和引用类型(地址)的参数

 public class PrimitiveTransferTest
{
public static void swap(int a , int b)
{
int tmp = a;
a = b;
b = tmp;
System.out.println("swap方法里,a的值是"
+ a + ";b的值是" + b);}
public static void main(String[] args)
{
int a = 6;
int b = 9;
swap(a , b);
System.out.println("交换结束后,变量a的值是"
+ a + ";变量b的值是" + b);  }

 class DataWrap
{
int a;
int b;
}
public class ReferenceTransferTest
{
public static void swap(DataWrap dw)
{
// 下面三行代码实现dw的a、b两个成员变量的值交换。
int tmp = dw.a;
dw.a = dw.b;
dw.b = tmp;
System.out.println("swap方法里,a成员变量的值是"
+ dw.a + ";b成员变量的值是" + dw.b);
// 把dw直接赋为null,让它不再指向任何有效地址。
dw = null;
}
public static void main(String[] args)
{
DataWrap dw = new DataWrap();
dw.a = 6;
dw.b = 9;
swap(dw);
System.out.println("交换结束后,a成员变量的值是"
+ dw.a + ";b成员变量的值是" + dw.b);
}

成员变量和局部变量成员变量是在类里定义的变量,局部变量实在方法里定义的变量。

只要类存在,程序可以访问该类的类变量 类.类变量

只要实例存在,程序可以访问该实例的实例变量 实例.实例变量

类变量也可以让该类的实例来访问    实例.类变量

通过实例修改类变量的值,会导致该类的其他实例访问这个类变量时也获得被修改的值。

java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,若需在方法里调用被覆盖的成员变量,则可使用this(实例变量)或类名(类变量)来调用。

成员变量在内存中的运行机制

java 学习笔记2 面向对象(上)的更多相关文章

  1. Java学习笔记(面向对象上)

    面向对象(上) 面向对象的特点:封装性(是面向对象的核心思想,将对象的属性和行为封装起来).继承性(主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和多态 ...

  2. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  3. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  4. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...

  5. 【原】Java学习笔记019 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...

  6. Java学习笔记--关于面向对象的思考

    1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...

  7. 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器

    Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...

  8. 【原】Java学习笔记016 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...

  9. 【原】Java学习笔记014 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 面向对象思想 // ...

随机推荐

  1. kubernetes入门(03)kubernetes的基本概念

    一.Pod 在Kubernetes集群中,Pod是创建.部署和调度的基本单位.一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个应用的容器.在同一个Pod内部,多个容器共享存储.网络IP,以 ...

  2. Docker加速器(阿里云)

    1. 登录阿里开发者平台: https://dev.aliyun.com/search.html,https://cr.console.aliyun.com/#/accelerator,生成专属链接 ...

  3. HTTP协议扫盲(二)HTTP协议的请求方法、请求头和响应头

    一.HTTP请求方法 Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST ...

  4. 前端之HTML内容

    一.HTML介绍 1.Web服务本质 当我们在浏览器中输入一个url后打开一个页面这个过程实质是一个网络编程中的sockt服务端接受指令并发送指令的一个过程.本质顺序是: 浏览器发请求——>HT ...

  5. 详解k8s零停机滚动发布微服务 - kubernetes

    1.前言 在当下微服务架构盛行的时代,用户希望应用程序时时刻刻都是可用,为了满足不断变化的新业务,需要不断升级更新应用程序,有时可能需要频繁的发布版本.实现"零停机"." ...

  6. 消息队列的使用 RabbitMQ (二): Windows 环境下集群的实现

    一.RabbitMQ 集群的基本概念 一个 RabbitMQ 中间件(broker) 由一个或多个 erlang 节点组成,节点之间共享 用户名.虚拟目录.队列消息.运行参数 等, 这个 节点的集合被 ...

  7. 基于哈夫曼编码的文件压缩(c++版)

    本博客由Rcchio原创 我了解到很多压缩文件的程序是基于哈夫曼编码来实现的,所以产生了自己用哈夫曼编码写一个压缩软件的想法,经过查阅资料和自己的思考,我用c++语言写出了该程序,并通过这篇文章来记录 ...

  8. c#:ThreadPool实现并行分析,并实现线程同步结束

    背景: 一般情况下,经常会遇到一个单线程程序时执行对CPU,MEMORY,IO利用率上不来,且速度慢下问题:那么,怎么解决这些问题呢? 据我个人经验来说有以下两种方式: 1.并行.多线程(Parall ...

  9. Canvas绘制五角星

    from tkinter import * import math as m root = Tk() w = Canvas(root, width=200, height=100, backgroun ...

  10. Terminal,git,vim常用命令整理以及删除本地git仓库

    Terminal常用命令 目录操作 ll 打开目录列表 ls -a 打开目录下所有文件列表 cd 切换到某目录 mkdir 创建目录 rmdir 删除空目录 rm -rf 目录名字 强制删除目录 mv ...