JAVA笔记day2


JAVA笔记-Day2

昨日回顾


类与对象


什么是类?

1、类是:分类、类别。

2、通过分类,我们可以区别不同的事物种类,在日常生活当中,我们常常这样做

3、所以,类是一组具有相同特性(属性)与行为(方法)的事物集合。

类与对象的关系

1、类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。

2、类由属性和方法组成:

  • 属性:就相当于一个个的特征
  • 方法:就相当于人的一个个的行为,Such as:说话、吃饭、唱歌、睡觉

为了方便理解(类与对象即为包含关系,类包含对象,例如:人类是一个类,然后我、你、李小龙、彭于晏即为对象)


类和对象的定义格式


在Java中可以使用以下的语句定义一个类

1
2
3
4
class 类名称{
属性名称;
返回值类型 方法名称(){}
}

对象的定义:

一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:

1
类名称 对象名称 = new 类名称();

按照以上的格式就可以产生对象了。

如果要想访问类中的属性或方法(方法的定义) .

则可以依靠以下的语法形式:

访问类中的属性:

1
对象.属性;

调用类中的方法:

1
对象.方法();

在java中对象声明有两种含义:

1
2
声明对象:Man man = null;
//表示声明了一个对象,但是此对象无法使用,man没有具体的内存指向,需要实例化一下也就是通常所说的new一下
1
2
实例化对象: man = new Man();
//表示实例化了对象,也就是常说的new了一下对象,接下开就可以使用它了

定义类、定义对象、定义方法、访问对象的属性、调用对象的方法例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
此代码编译时会出现两个.class文件
一个类就是一个.class
*/
public class Day2{
public static void main(String[] args){
Man man = null; //声明一个类的变量(除了八种基本数据类型以外,都是引用数据类型,包括数组)
//表示声明了一个对象,但是此对象无法使用,man没有具体的内存指向
man = new Man(); //创建一个Man类型的对象,实例化对象
//有了对象,就可以调用对象的属性和方法
man.name = "小轩同学";
man.age = 21;

man.walk(); //调用walk方法,那么方法就会被执行。
man.code(); //调用code方法,那么方法就会被执行。

//匿名对象:只能使用一次,用完后,该对象就会被释放
new Man().code();

man = null; //把对象释放
//man.code(); //当对象不存在时,调用该对象的属性和方法将报错(空指针)
}
}

//自定义一个类(类型)
class Man{
//在类中定义属性(特征)
String name; //字符串是引用类型变量,不是基本数据类型变量
int age;
//在类中定义方法
public void walk(){
System.out.println("我是"+name+"我"+age+"岁,我能走路");
}
public void code(){
System.out.println("我能写代码,尽管写的不好");
}
}

此代码运行之后的结果:

1
2
我是小轩同学我21岁,我能走路
我能写代码,尽管写的不好

对象内存分析


1、new关键字表示创建一个对象

2、new关键字表示实例化一个对象

3、new关键字表示申请内存空间

注意:如果使用一个没有申请内存空间的对象,会报空指针异常

java.lang.NullPointerException


对象在内存中的结构:

Man man = null;

fMP7b6.png

man = new Man();

fMPTDx.png

给对象的属性赋值

man.name = “小轩同学”

man.age = 21

则堆内存中的 name = “小轩同学” age = 21

一个类下创建多个对象

各个对象指向堆内存各自的内存空间

1
2
3
4
5
6
7
8
Man man1 = null;
Man man2 = null;
man1 = new Man();
man2 = new Man();
man1.name = "小轩同学";
man1.age = 21;
man2.name = "小张同学";
man2.age = 22;

对象之间的赋值

各个对象指向堆内存同一个内存空间

如果在此时更改其中一个对象的属性,另一个对象的相对应的属性也会发生变化,因为这两个对象其实为同一个对象,更改的为同一个“东西”

1
2
3
4
5
6
7
8
Man man1 = null;
Man man2 = null;
man1 = new Man();
man1.name = "小轩同学";
man1.age = 21;

man2 = man1;//对象之间的赋值,相同类型才可以赋值

如果堆内存的一个空间没有被栈内存所指向,那么虚拟机会认为此堆内存是垃圾内存,会被进行回收


类与对象小结

  1. new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。
  2. 一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上额外的对象隐性数据所占大小。
  3. 相同的类型才可以赋值
  4. 不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。
  5. 编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用 = null;
  6. 当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM的GC程序认为是垃圾对象,从而被回收。


文章作者: 小轩同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小轩同学 !
  目录