JavaSE---类、对象、成员变量、局部变量
1、概述
1.1 类
1.1.1 类 是一种 自定义的 引用 数据类型;
1.2 对象
1.2.1 创建对象的根本途径:构造器; 通过new关键字 来调用 某个类的构造器;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package com.an.faceobject; public class Person { String name; Integer age; public Person(){ } public Person(String name,Integer age){ this .name=name; this .age=age; } Person p= new Person( "jack" , 12 ); } |
Person p=new Person("jack",12);
p存储在 栈内存中,存储着Person对象在内存存储的地址值;
Person对象存储在 堆内存中;
【注意】:多个引用变量 可以指向同一个对象;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.an.faceobject; public class Person { String name; Integer age; public Person(){ } public Person(String name,Integer age){ this .name=name; this .age=age; } Person p= new Person( "jack" , 12 ); //p1,p2均指向同一个Person对象 Person p1=p; Person p2=p; } |
【注意】:当一个对象不被任何引用变量引用时,java的垃圾回收机制将会将其内存回收;
可以显式将Person p=null; Person p1=null; Person p1=null; 切断对象与引用变量的关系;
1.3 成员变量:
1.3.1 定义在 类 范围内的、无需显式初始化;
1.3.2 包括 类变量(static修饰) 、对象变量;
1.3.3 只要 类存在,程序就可以访问该类的变量(类.属性);
1.4 局部变量:
1.4.1 定义在 方法 内的、必须显式初始化;
1.4.2 只要对象 存在,程序就可以访问该对象的变量(对象.属性);
1.4.3 对象 也可以直接访问类属性(对象.类属性);
但是 一旦对类属性值进行修改,则类属性值将会改变,其他对象访问均是改变后的值;
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 | package com.an.faceobject; public class Person { String name; Integer age; static String sex= "man" ; public Person(){ } public Person(String name,Integer age){ this .name=name; this .age=age; } public static void test(){ Person p= new Person( "jack" , 12 ); p.sex= "female" ; } public static void main(String[] args){ System.out.println( "pre:" +sex); test(); System.out.println( "after:" +sex); } } 结果: pre:man after:female |
1.4.4 局部变量根据定义形式的不同,分为:
a,方法形参:
方法声明时定义;
方法内有效;
无需显式初始化,在调用时由系统完成;
b,方法局部变量:
方法体内定义;
方法内有效;
必须显式初始化;
c,代码块局部变量:
代码块中定义;
代码块内有效;
1.4.5 java中允许成员变量与局部变量同名,但是局部变量值会覆盖掉成员变量值,如果要使用成员变量值,可以使用对象.属性(类.类属性) ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package com.an.faceobject; public class Person { String name= "jack" ; public static void main(String[] args){ String name= "rose" ; System.out.println(name); System.out.println( new Person().name); } } 结果: rose jack |
1.5 静态成员与非静态成员调用:
静态方法 中可以直接调用同类中静态成员;
静态方法 中如果想 调用非静态成员,需要创建对象,由对象调用;
非静态方法 中可以直接访问静态变量、非静态变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.an.faceobject; public class Person { String name; Integer age; static String sex= "man" ; public void test1(){ //普通方法中直接调用静态变量、非静态变量 sex= "" ; name= "" ; } public static void test(){ Person p= new Person(); //静态方法中可以由对象来调用非静态方法 p.test1(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?