浅谈JAVA类与对象
类与对象
先来用一张图来说说类与对象包括什么:
类:类的定义、包、变量、权限修饰符、方法重载、参数传值、this关键字
对象:对象的定义、对象的创建格式及区别、对象属性和行为的访问、对象的引用比较和销毁
类
类是一组具有相同属性和行为的对象的抽象
举例看看:
public class Heroes {
private String name;
private String role;
static int roleId;
final static double PI = 3.1415926;
public Heroes(String name, String role) {
this.name = name;
this.role = role;
}
public Heroes() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public void fight(String message) {
int id = 0;
System.out.println("fight..." + id + ":" + message);
}
public static void bloodReturning(String home) {
System.out.println("回血:" + home);
}
}
包
Java 中使用 package 语句定义包,package 语句应该放在源文件的第一行,在每个源文件中只能有一个包定义语句,并且 package 语句适用于所有类型(类、接口、枚举和注释)的文件。定义包语法格式如下:
包的命名
Java包的命名规则如下:
- 包名全部由小写字母(多个单词也全部小写)
- 如果包名包含多个层次,每个层次用“.”分割
- 包名一般由倒置的域名开头,比如com. baidu,不要有www
- 自定义包不能以 java开头
包的使用
- 在要引用的类名前带上包名作为修饰符
com.dingli.edu.Person person = new com.dingli.edu.Person(); - 在文件开头使用import引用包中的类
import com.dingli.edu.Person; - 在文件前使用import引用整个包
import com.dingli.edu.*;
这里列举一下java文档里的常用包
包 |
说明 |
java.lang |
Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、异常处理和线程类等,系统默认加载这个包 |
java.io |
Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等 |
java.util |
包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类 |
java.awt |
构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理(如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事件响应(如 Event 类) |
java.awt.image |
处理和操纵来自网上的图片的 Java 工具类库 |
java.wat.peer |
很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行 |
java.net |
实现网络功能的类库有 Socket 类、ServerSocket 类 |
java.lang.reflect |
提供用于反射对象的工具 |
java.util.zip |
实现文件压缩功能 |
java.awt.datatransfer |
处理数据传输的工具类,包括剪贴板、字符串发送器等 |
java.sql |
实现 JDBC 的类库 |
java.rmi |
提供远程连接与载入的支持 |
java. security |
提供安全性方面的有关支持 |
成员变量、局部变量、静态变量的区别
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
|
成员变量 |
局部变量 |
静态变量 |
定义的位置 |
类中,方法外 |
方法中,或者方法的形式参数 |
在类中,方法外 |
初始化值 |
有默认初始化值 |
无,先定义,赋值后才能使用 |
有默认初始化值 |
调用方式 |
对象调用 |
|
对象调用,类名调用 |
存储位置 |
堆中 |
栈中 |
方法区 |
生命周期 |
与对象共存亡 |
与方法共存亡 |
与类共存亡 |
别名 |
实例变量 |
|
类变量 |
权限修饰符区别
|
public |
Protected |
Default |
private |
同一个类 |
√ |
√ |
√ |
√ |
同一个包 |
√ |
√ |
√ |
|
子类 |
√ |
√ |
√ |
|
不同包 |
√ |
|
|
方法重载
就是在同一个类中,方法的名字相同,参数列表不同(顺序不同、个数不同、类型不同),实现相似的功能,与修饰符、返回值类型无关。我们会觉得方法调用的时候就像调用一个方法一样 。
看看下面的第一个sum()静态方法,里面的形参是int类型; 第二个重载就是都变了方法,形参是double类型;第三个是混合的参数类型。
public class OverLoad {
public static void main(String[] args) {
sum(5, 8);
sum(4.5, 6.5);
sum(1, 5, 2.3);
}
public static void sum(int a, int b) {
int sum = a + b;
System.out.println(sum);
}
public static void sum(double c, double d) {
double sum = c + d;
System.out.println(sum);
}
public static void sum(int e, int f, double g) {
double sum = e + f + g;
System.out.println(sum);
}
}
参数传值
8大基本数据类型,参数传递过程采用值拷贝的方式
public class Demo {
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println("main方法中a的值:" + a);
}
public static void change(int a) {
a = a * 2;
System.out.println("change方法中a的值:" + a);
}
}
参数类型为引用类型,参数传递的过程采用引用拷贝的方式
public class Demo {
public static void main(String[] args) {
Test test = new Test(10);
change(test);
System.out.println("main方法中a的值:" + test.a);
}
public static void change(Test test) {
test.a = test.a * 2;
System.out.println("change方法中a的值:" + test.a);
}
}
class Test {
public int a;
public Test(int a) {
this.a = a;
}
}
this关键字
关键字this表示当前对象,引用对象自身。 可以用于访问实例的数据域, 尤其是实例变量和局部变量同名时,进行分辨。除此之外,可以在构造方法内部调用同一个类的其他构造方法 。
public class ThisTest {
public String name;
public int age;
public ThisTest(String name, int age) {
this.name = name;
this.age = age;
}
public void say() {
String name = “tom";
System.out.println("name:" + this.name);
}
public static void main(String[] args) {
ThisTest thisTest = new ThisTest("1810", 20);
thisTest.say();
}
}
对象
对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象
对象的创建格式
格式一:声明并实例化对象
类名称对象名称=new类名称();
格式二:先声明对象,然后实例化对象
类名称对象名称=null;
对象名称=new类名称();
引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间
两种对象创建格式的区别从内存角度来分析
(1)堆内存(heap):保存对象的属性内容。堆内存需要用new关键字来分配空间
(2)栈内存(stack):保存的是堆内存的地址
访问对象的属性和行为
public class Demo {
int id = 12;
public Demo() {
}
public void changeId() {
id *= 2;
System.out.println(id);
}
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
demo2.id = 20;
System.out.println("demo1的属性值:" + demo1.id);
demo1.changeId();
System.out.println("demo2的属性值:" + demo2.id);
demo2.changeId();
}
}
对象的引用、比较和销毁
对象引用语法格式:类名引用对象名称
对象的比较:1、==运算符2、equals()方法
对象的销毁:对象的销毁利用的是Java中的垃圾回收机制
(1)对象引用超过其作用范围
(2)将对象赋值为null
关于JAVA类与对象大概就介绍到这里了,感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。
- 点赞
- 收藏
- 关注作者
评论(0)