类和对象(Java)

  • 类定义和使用
  • 类的实例化
  • 类的成员
  • this 指针
  • 访问限定符
  • static
  • 内部类
  • 类和对象的内存布局

Java是一门纯面向对象的的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面想对象的思想来设计程序,更符合人们对事物的认知,对于大型程序的设计,扩展以及维护非常友好。

类定义和使用

类主要是用来对一个实体(对象)来进行描述的,表示具体问题中一些问题的抽象。(用代码来表示一些现实中的东西)。

在Java中定义类时需要关键字class

class Test {field;//成员属性method;//成员方法
}

class为定义类的关键字,Test为类的名字,{}中为类的主体。

定义一个类

public class Cat {public String name;public String gender;public int age;// 品种public String breed;// 颜色public String color;//猫的行为,方法public void eat(String food) {System.out.println(name + " 正在吃 " + food);}public void sleep() {System.out.println(name + " 正在睡觉觉");}
}

类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int,double是Java语言自带的内置类型,而类是用户定义的一个新的类型。

从代码/语法角度看:
类:自定义类型(高配的结构体),类相当于将现实事物中的属性和行为结合到一起
对象:自定义类型创建出来的变量

有类以后,还需根据这个类,创建出一些具体的对象来,这个操作也称为 “实例化”。 在Java中用new关键字,来进行类名实例化对象。

// 一个 .java 文件中允许有多个类.
// 其中得有一个(不能是多个) 用 public 修饰的类.
// 这个类名字必须和文件名严格相同
// 多数情况下, 一个文件中只有一个类.
public class Cat {public String name;public String gender;public int age;// 品种public String breed;// 颜色public String color;//猫的行为,方法public void eat(String food) {System.out.println(name + " 正在吃 " + food);}public void sleep() {System.out.println(name + " 正在睡觉觉");}
}public Cat() {System.out.println("这是构造方法");name = "咪咪";gender = "公猫";age = 1;breed = "中华田园猫";color = "橘色";}
public class Test {public static void main(String[] args) {Cat cat = new Cat();cat.eat("鱼肉");}
}
  • 使用 ** . **可以用来访问对象中的属性和方法
  • 同一个类可以创建多个方法
  • new关键字用来创建一个对象实例

类只是一个模型一样的东西,类似于用来盖房子的图纸,用来对实体进项描述,限定了类有哪些成员
实例化出的对象,类似于按图纸建一个一个的房子,占用实际物理空间,存储类成员变量

每个属性,可以有四种修饰,public,private,protected,啥也没有(default)
修改类名的时候,最好使用shift + F6 (重构功能)
建议在创建变量时,最好初始化一下。

类的成员

类的成员:字段、方法、代码块、内部类和接口等

字段 / 属性 / 成员变量
在类中,在方法外部定义的变量称之为“成员变量”,“属性”,“字段”均可。用于描述一个类中包含哪些数据。

public class Student {// 属性/成员变量/字段// 直接写到类里面的变量就是 "成员变量"// 写到方法里面的变量就是 "局部变量"public String name;public int age;public String gender;// 方法/成员函数public void eat(String food) {System.out.println(name + " 正在吃 " + food);}
}

方法

Java中对于对象的初始化方式有很多。

  1. 默认值 不同类型默认值不一样
public class DefaultValue {public int a;public long b;public double c;public boolean d;public char e;public String f;public int[] g;public void printA(){System.out.println(a);  //0System.out.println(b);  //0System.out.println(c);  //0.0System.out.println(d);  //falseSystem.out.println(e);  //             \u000  unicodeSystem.out.println(f);  //nullSystem.out.println(g);  //null}
}
  1. 就地初始化
public int a = 0;
public long b = 1000;
public double c = 1.0;
public boolean d = true;
  1. 代码块初始化
  2. 构造方法初始化

构造方法是一种特殊的方法:

  1. 构造方法的方法名是固定的,必须和类名相同
  2. 构造方法不需要return语句,但是可以理解成返回了该对象的引用
  3. 构造方法不需要显示调用,而在new的时候就自动被调用
  4. 构造方法也是支持重载的,重载规则和普通方法一样
    public String gender;public int age;// 品种public String breed;// 颜色public String color;{System.out.println("这是代码块初始化");name = "阿花";}public Cat() {System.out.println("这是构造方法初始化");name = "咪咪";gender = "公猫";age = 1;breed = "中华田园猫";color = "橘色";}

this 指针

Java编译器给每个“成员方法”增加了一个隐藏的引用类型参数,让该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

public class Cat {public String name;public String gender;public Cat(String name, String gender) {this.name = name;  //调用类中属性this.gender = gender;this.eat("鱼");    //调用类中方法}public void eat(String food) {System.out.println(name + "正在吃" + food);}

this 引用是编译器自动添加的,用户在实现代码时一般不需要显示给出。

this引用的特性

  1. this 指向当前对象的引用
  2. this 的类型就是这个类的类型
  3. this 这个引用的指向是不能修改
  4. this 也可以用来调用方法
  5. this 不能是null

访问限定符

面向对象程序设计,这是一种写代码的思维方法。

面向对象的特性:

  • 类和对象
  • 抽象
  • 封装
  • 继承
  • 多态
  • 组合
  • 反射 / 自省

  • 其中具有代表性的三大特性是:封装、继承、多态

访问限定符体现“封装”特性,封装是管理复杂程度的核心手段.。 封装是一个非常重要的事情,不仅仅局限于在面向对象中。

  • public: 修饰的成员变量可以被外部的类随意访问 修饰的成员,访问权限最大
  • private:只能在类内部使用 访问权限最小
  • protected:搭配继承
  • default(不写):包级权限

封装的目的就是为了让使用者了解到的信息尽量的少
如果一个成员被private修饰了,此时使用者就获取不到了。一般原则是,一个成员,能是private,就尽量设定成private

static

static 表示的含义和字面没有任何关系!!!

如果类中的某个成员加上static,说明这个成员是一个类属性/类方法,如果没有static,成员是一个实例属性/实例方法

  1. 修饰属性
  2. 修饰方法
  3. 代码块
  4. 修饰类
public String name;
public String gender;static {// 这个加上 static 的代码块叫做 "静态代码块"// 静态代码块内容只在程序启动(更严谨的应该叫做 "类加载的时候") 的时候执行一次.System.out.println("这是静态代码块");
}{System.out.println("这是普通代码块");
}public static int n = 0;public static void func() {System.out.println("这是一个 static 方法");
}

静态方法中不能使用this,this指向的是当前的实例,static方法和实例无关,只和类有关。同理也无法在static方法中访问非static的变量和方法。

static修饰代码块,代码块只是在类加载的时候执行一次,往往用来初始化静态成员

内部类

把类定义到另一个类中

  1. 普通的内部类 / 成员内部类
  2. 静态内部类(内部类前加static)
  3. 匿名内部类(相对比较常用)
  4. 局部内部类
public class Main {// 加上 static 就是静态内部类static class Test {public int num;}public static void main(String[] args) {//         成员内部类依赖外部类的 this. 在外部类的 static 方法中没有 this, 此时无法实例化.
//         静态内部类不依赖外部类的 this, 可以随意创建Test t = new Test();//         此时创建了一个匿名内部类. 这个类没有名字.
//         这个类是 A 类的子类(继承自 A 类)A a = new A() {// 定义属性和方法};//         局部内部类, 直接定义到方法内部class Test2 {};
}
}

类和对象的内存布局

操作系统中,一个进程的内存区域,也被分为若干个部分,**JVM先从操作系统上申请一大块内存空间。**进行划分

  • 栈:方法和方法之间的调用关系,局部变量
  • 堆:new出来的对象,实例,成员变量
  • 方法区:存放方法的 二进制指令
public class Main {public static void main(String[] args) {fun();}public void fun() {Test t = new Test();}
}public class Test {public int num = 100;
}

类和对象(Java)相关推荐

  1. java什么是类和对象,Java类和对象的概念

    Java是一门面向对象的编程(Object Oriented Programming, OOP)语言,面向对象是相对于面向过程而言.那么什么是面向对象,什么又是面向过程呢? 面向过程--步骤化 面向过 ...

  2. 6.java中什么是类_类、对象(java基础知识六)

    1.Java约定俗成 java约定俗成1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用英语 ...

  3. 类与对象——Java程序设计基础

    目录 一.面向对象概念 二.类的定义 三.对象的创建和使用 四.类的封装 五.构造方法的定义 六.this关键字 七.垃圾回收 八.static关键字 一.面向对象概念 –面向对象是一种符合人类思维习 ...

  4. 计算长方形的周长和面积(类和对象java)

    计算长方形的周长和面积(类和对象) Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Description 设计 ...

  5. 复习Java类与对象Java字符串面试题生活【记录一个咸鱼大学生三个月的奋进生活】003

    记录一个咸鱼大学生三个月的奋进生活003 复习Java(类与对象) 学习Java面试题 初步规划软件测试课设 健身 照片分享 复习Java(类与对象) 既然要说类与对象那就要明确 面向对象 这个概念: ...

  6. 类和对象--java(超级详细,两万字!)

    类和对象 一个对象的产生至少有以下两步: 1.为对象分配内存 2.调用合适的构造方法 1.面向对象的初步认知 1.1什么是面向对象 java是一门纯面向对象的语言(Object Oriented Pr ...

  7. java测试类生成对象,java编写student类 用Java编写一段测试程序,生成student类的两个对象,并输出每个对象基本信息?...

    java中怎么创建对象数组?比如我创建了一个学生类Student,怎么用这个类创建一个对象数组,麻烦给个例子? 学生类:classA{privateStringnameprivateintagepub ...

  8. JAVA基础七 类和对象

    文章目录 JAVA基础七 类和对象 01 引用 02 继承 03 方法重载 04 构造方法 05 this 06 传参 07 包 08 访问修饰符 09 类属性 10 类方法 11 属性初始化 12 ...

  9. 【Java类和对象】

    Java类和对象 在Java简介中就有介绍到,Java是一门面向对象的编程语言,在面向对象的编程语言中,肯定离不开对象这个概念,而对象则是类的实例,所以也肯定离不开类这个概念.简单的来说就是,在Jav ...

  10. Java知识点总结【3】类和对象

    目录 1.什么是面向过程,什么是面向对象 2.什么是类和对象 3.类的定义和使用 4.成员变量的初始化 5.toString 6.关于static 7.访问限定符 8.代码块 9.内部类 10.类和对 ...

最新文章

  1. json转换模型利器--JSONExport
  2. 推荐大家使用的CSS书写规范、顺序
  3. 花生增产对话万书波-农业大健康·万祥军:获山东科技最高奖
  4. 科学计算:Python VS. MATLAB (1)----给我一个理由先
  5. tensorflow随笔-tf.no_op
  6. docker拷贝文件
  7. hash表和hashmap
  8. 1.1 为什么是 ML 策略
  9. 基于 webdriver 的测试代码日常调试方python 篇
  10. 启动和停止数据库——停止例程
  11. Javascript第七章cookie的读取和写入源码第一课
  12. linux上传文件夹工具,[转] psftp(linux简易上传上载工具)的用法及常用命令
  13. 生成淘口令发现的一个趣事 c#
  14. 人工智能-八数码问题-启发式搜索
  15. Delphi第三方控件大比拼
  16. Q-learning 算法工作原理
  17. PPT超链接字体颜色修改方法
  18. windows下操作Nginx基本命令
  19. 大前端各阶段知识点,视频,软件,书籍,源码,面试题等汇总
  20. DbVisualizer解决中文乱码问题

热门文章

  1. Dremel made simple with Parquet
  2. CoolPad 8190工程模式
  3. Flink批流一体的理解
  4. linux下查看系统配置参数
  5. WebGL简易教程(十一):纹理
  6. FROM_GLC的介绍与数据下载教程
  7. 小度计算机笔记,“一场无速记发布会”,小度真无线智能耳机革新语音笔记功能...
  8. 机械键盘和普通键盘打字哪个舒服
  9. pdman 连接失败出错消息:Cannot load connection class because of underlying exceptiocom mysql. cj.
  10. tensorflow系统学习(1):如何使用tensorflow