类和对象(Java)
类和对象(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中对于对象的初始化方式有很多。
- 默认值 不同类型默认值不一样
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}
}
- 就地初始化
public int a = 0;
public long b = 1000;
public double c = 1.0;
public boolean d = true;
- 代码块初始化
- 构造方法初始化
构造方法是一种特殊的方法:
- 构造方法的方法名是固定的,必须和类名相同
- 构造方法不需要return语句,但是可以理解成返回了该对象的引用
- 构造方法不需要显示调用,而在new的时候就自动被调用
- 构造方法也是支持重载的,重载规则和普通方法一样
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引用的特性:
- this 指向当前对象的引用
- this 的类型就是这个类的类型
- this 这个引用的指向是不能修改
- this 也可以用来调用方法
- this 不能是null
访问限定符
面向对象程序设计,这是一种写代码的思维方法。
面向对象的特性:
- 类和对象
- 抽象
- 封装
- 继承
- 多态
- 组合
- 反射 / 自省
- …
其中具有代表性的三大特性是:封装、继承、多态
访问限定符体现“封装”特性,封装是管理复杂程度的核心手段.。 封装是一个非常重要的事情,不仅仅局限于在面向对象中。
- public: 修饰的成员变量可以被外部的类随意访问 修饰的成员,访问权限最大
- private:只能在类内部使用 访问权限最小
- protected:搭配继承
- default(不写):包级权限
封装的目的就是为了让使用者了解到的信息尽量的少
如果一个成员被private修饰了,此时使用者就获取不到了。一般原则是,一个成员,能是private,就尽量设定成private
static
static 表示的含义和字面没有任何关系!!!
如果类中的某个成员加上static,说明这个成员是一个类属性/类方法,如果没有static,成员是一个实例属性/实例方法
- 修饰属性
- 修饰方法
- 代码块
- 修饰类
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修饰代码块,代码块只是在类加载的时候执行一次,往往用来初始化静态成员
内部类
把类定义到另一个类中
- 普通的内部类 / 成员内部类
- 静态内部类(内部类前加static)
- 匿名内部类(相对比较常用)
- 局部内部类
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)相关推荐
- java什么是类和对象,Java类和对象的概念
Java是一门面向对象的编程(Object Oriented Programming, OOP)语言,面向对象是相对于面向过程而言.那么什么是面向对象,什么又是面向过程呢? 面向过程--步骤化 面向过 ...
- 6.java中什么是类_类、对象(java基础知识六)
1.Java约定俗成 java约定俗成1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用英语 ...
- 类与对象——Java程序设计基础
目录 一.面向对象概念 二.类的定义 三.对象的创建和使用 四.类的封装 五.构造方法的定义 六.this关键字 七.垃圾回收 八.static关键字 一.面向对象概念 –面向对象是一种符合人类思维习 ...
- 计算长方形的周长和面积(类和对象java)
计算长方形的周长和面积(类和对象) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 设计 ...
- 复习Java类与对象Java字符串面试题生活【记录一个咸鱼大学生三个月的奋进生活】003
记录一个咸鱼大学生三个月的奋进生活003 复习Java(类与对象) 学习Java面试题 初步规划软件测试课设 健身 照片分享 复习Java(类与对象) 既然要说类与对象那就要明确 面向对象 这个概念: ...
- 类和对象--java(超级详细,两万字!)
类和对象 一个对象的产生至少有以下两步: 1.为对象分配内存 2.调用合适的构造方法 1.面向对象的初步认知 1.1什么是面向对象 java是一门纯面向对象的语言(Object Oriented Pr ...
- java测试类生成对象,java编写student类 用Java编写一段测试程序,生成student类的两个对象,并输出每个对象基本信息?...
java中怎么创建对象数组?比如我创建了一个学生类Student,怎么用这个类创建一个对象数组,麻烦给个例子? 学生类:classA{privateStringnameprivateintagepub ...
- JAVA基础七 类和对象
文章目录 JAVA基础七 类和对象 01 引用 02 继承 03 方法重载 04 构造方法 05 this 06 传参 07 包 08 访问修饰符 09 类属性 10 类方法 11 属性初始化 12 ...
- 【Java类和对象】
Java类和对象 在Java简介中就有介绍到,Java是一门面向对象的编程语言,在面向对象的编程语言中,肯定离不开对象这个概念,而对象则是类的实例,所以也肯定离不开类这个概念.简单的来说就是,在Jav ...
- Java知识点总结【3】类和对象
目录 1.什么是面向过程,什么是面向对象 2.什么是类和对象 3.类的定义和使用 4.成员变量的初始化 5.toString 6.关于static 7.访问限定符 8.代码块 9.内部类 10.类和对 ...
最新文章
- json转换模型利器--JSONExport
- 推荐大家使用的CSS书写规范、顺序
- 花生增产对话万书波-农业大健康·万祥军:获山东科技最高奖
- 科学计算:Python VS. MATLAB (1)----给我一个理由先
- tensorflow随笔-tf.no_op
- docker拷贝文件
- hash表和hashmap
- 1.1 为什么是 ML 策略
- 基于 webdriver 的测试代码日常调试方python 篇
- 启动和停止数据库——停止例程
- Javascript第七章cookie的读取和写入源码第一课
- linux上传文件夹工具,[转] psftp(linux简易上传上载工具)的用法及常用命令
- 生成淘口令发现的一个趣事 c#
- 人工智能-八数码问题-启发式搜索
- Delphi第三方控件大比拼
- Q-learning 算法工作原理
- PPT超链接字体颜色修改方法
- windows下操作Nginx基本命令
- 大前端各阶段知识点,视频,软件,书籍,源码,面试题等汇总
- DbVisualizer解决中文乱码问题
热门文章
- Dremel made simple with Parquet
- CoolPad 8190工程模式
- Flink批流一体的理解
- linux下查看系统配置参数
- WebGL简易教程(十一):纹理
- FROM_GLC的介绍与数据下载教程
- 小度计算机笔记,“一场无速记发布会”,小度真无线智能耳机革新语音笔记功能...
- 机械键盘和普通键盘打字哪个舒服
- pdman 连接失败出错消息:Cannot load connection class because of underlying exceptiocom mysql. cj.
- tensorflow系统学习(1):如何使用tensorflow