Java基础 - 类与对象

一、类与对象的概念和特点

1.1 概念

类与对象是整个面向对象中最基础的组成单元。
:是具有相同属性和行为的一组对象的集合,类之中定义的是属性和行为(方法);
对象:是类的实例化,这些对象拥有类的属性和行为,即某个具体的实体,有个一个对象,这些属性才有值,这些行为才有了意义。

1.2 特点

:是对象的数据类型;
对象:是具体的事物,是计算机中的一份数据 。

二、类与对象的定义和使用

2.1 基本语法


关键字:class
语法如下:

class 类名{
         属性 (数据) ;
         行为 (方法) ;
}

其中:
属性: 表达数据
(1)用变量/常量 表达
(2)格式:[修饰词] 属性的数据类型 属性变量名; 如下:

private String userName; 
int age;

方法:表达行为
(1)用函数表达
(2)格式: [方法修饰词] 返回值类型 方法名(参数列表(参数类型 参数变量名)){ 方法体 };如下:

public void showInfo(){ 
      System.out.println(name+"--"+age)
     }  

范例:定义一个User类

class User {     // 类名称首字母大写
    String userName ;
    private String passWord ;
    int age ;
    public void test() {        
          System.out.println("账号:" + userName + ",密码:" + passWord) ;
         }
}

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象。
对象
关键字:new
语法如下:

类名称 对象名称 = new 类名称 () ; //声明并实例化对象

由于类属于引用数据类型,需要内存的分配和使用。关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。
范例:创建对象

User u = new User();

上述范例代码可以拆分成:

User u = null; //声明对象
u = new User(); //实例化对象

(1)user u:变量空间,可以存储对象空间的引用地址;
(2)new User():对象空间,可以存储对象的属性(其中每执行一次对象的创建,都会在内存中创建一个对象空间,并初始化一份新的属性数据)。
我们从内存的角度分析。给出两种内存空间的概念:
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
在这里插入图片描述
任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。
当一个实例化对象产生之后,可以按照如下的方式进行类的操作使用:

对象.属性; //表示调用类之中的属性; 
对象.方法(); //表示调用类之中的方法。

范例:

package V;

class User {     // 类名称首字母大写
    String userName ;
    String passWord ;
    int age ;
    public void test() {        
        System.out.println("账号:" + userName + ",密码:" + passWord) ;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        User u = new User(); // 声明并实例化对象
        u.userName = "Paul"; //操作属性内容
        u.passWord = "paul123"; //操作属性内容
        u.test(); //调用类中的test()方法


    }
}

运行结果:

账号:Paul,密码:paul123

上面对象实例化对象方式内存表示如下:
在这里插入图片描述

2.2 对象引用传递

范例:

package V;

class User {     // 类名称首字母大写
    String userName ;
    String passWord ;
    int age ;
    public void test() {        
        System.out.println("账号:" + userName + ",密码:" + passWord) ;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        User u_1 = new User(); // 声明并实例化对象
        u_1.userName = "Paul"; //操作属性内容
        u_1.passWord = "paul123"; //操作属性内容
        User u_2 = u_1; //引用传递
        u_2.userName = "Tom";
        u_1.test(); //调用类中的test()方法


    }
}

运行结果:

账号:Tom,密码:paul123

在这里插入图片描述

三、静态

关键词 static,与对象无关,可以通过类名直接调用

3.1 静态变量

1.当实例变量被static修饰,表示类的属性,该类的所有对象共享这一个属性;
2.static修饰的属性在JVM方法区存储,所有该类对象共享此属性;
3.当类加载到内存中时,该类的所有static变量就会被加载到方法区中,并可直接通过类名称访问该方法,无需通过对象访问;
4.方法中不能定义静态变量。因为方法中的变量是局部变量在栈中存储,静态变量在方法区中存储,不可能一个变量存储在两个地方。
语法如下:

static 属性类型 属性名;

范例:

package V;

class User {
    String userName ;
    String passWord ;
    static int age = 10;
    public void test() {
        System.out.println("账号:" + userName + ",密码:" + passWord+ ",年龄:" + age) ;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        User u = new User();
        u.userName = "Paul";
        u.passWord = "paul123";
        u.test();
        System.out.println("-------------------------------");
        User u_1 = new User();
        u_1.age = 20;
        u.test();
        u_1.test();
        System.out.println("-------------------------------");
        User.age = 30; //用类名直接访问属性
        u.test();
        u_1.test();
    }
}

运行结果

账号:Paul,密码:paul123,年龄:10
-------------------------------
账号:Paul,密码:paul123,年龄:20
账号:null,密码:null,年龄:20
-------------------------------
账号:Paul,密码:paul123,年龄:30
账号:null,密码:null,年龄:30

3.2 静态方法

1.static修饰的方法是静态方法,没有对象也能调用;
2.静态方法不能访问成员变量和成员方法;
3.成员方法能访问静态变量和静态方法。
范例:

package V.Static;

class User02 {
    String userName ;
    String passWord ;
    static int age = 10;
    public void test() {
        System.out.println("账号:" + userName + ",密码:" + passWord+ ",年龄:" + age) ; //可以访问静态变量age
        test01(); //可以访问静态方法
    }
    static void test01(){
//        System.out.println(userName);//error(不能访问成员变量)
//        test();//error(不能访问成员方法)
        System.out.println("年龄:" + age);
        System.out.println("静态方法");
    }
}
public class Java02_Static_Method {
    public static void main(String[] args) {
        User02 u = new User02();
        u.userName = "Paul";
        u.passWord = "paul123";
        u.test();
        System.out.println("-------------------------------");
        User02.test01(); //可以用类名直接调用静态方法
    }
}

结果:

账号:Paul,密码:paul123,年龄:10
年龄:10
静态方法
-------------------------------
年龄:10
静态方法

3.3 静态代码块

3.3.1 构造代码块

1.定义在类中,使用{}括起来的代码块;
2.构造代码块优先于构造方法执行,创建几个对象就执行几次构造代码块
范例:

package V.Static;

class Test_03{
    //构造代码块
    {
        System.out.println("构造代码块01");
    }
    //构造方法
    public Test_03(){
        System.out.println("构造方法");
    }
    {
        System.out.println("构造代码块02");
    }
}
public class Java03_构造代码块 {
    public static void main(String[] args) {
        Test_03 t_1 = new Test_03();
        System.out.println("----------------------");
        Test_03 t_2 = new Test_03();
    }
}

结果:

构造代码块01
构造代码块02
构造方法
----------------------
构造代码块01
构造代码块02
构造方法

3.3.2 静态代码块

1.定义在类中,使用使用static修饰的代码块;
2.类加载完成后,会自动调用静态代码块,但不管创建多少个对象静态代码块都只执行一次
3.静态代码块优先于构造代码块执行。

package V.Static;

class Test_04{
    //构造代码块
    {
        System.out.println("构造代码块01");
    }
    //静态代码块
    static{
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块02");
    }
    static{
        System.out.println("静态代码块");
    }
}
public class Java04_静态代码块 {
    public static void main(String[] args) {
        Test_04 t_1 = new Test_04();
        System.out.println("----------------------");
        Test_04 t_2 = new Test_04();
    }
}

结果:

静态代码块
静态代码块
构造代码块01
构造代码块02
----------------------
构造代码块01
构造代码块02
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值