当前位置: 首页 > ai >正文

Java学习笔记二(类)

前言:

类的五大构成(1成员变量,2成员方法,3构造器,4代码块,5内部类)

注释:类存放在(方法区),变量存放在(栈区),对象存放在(堆区)

(1) 类的定义

public class 类名 {...
}

(2) 类的实例化

注释:对象(类的实例化):类名 对象名 = new 类名();

public void test() {类型 对象名 = new 类型();
}

1 成员变量(全局变量)

public class 类名 {[修饰符] 类型 全局变量名 [=默认值];
}

2 成员方法

2.1 方法定义

public class 类名 {[修饰符] void 方法名() {... }[修饰符] void 方法名(参数类型 参数名, ...) {... }[修饰符] 返回值类型 方法名() {... return 返回值;}[修饰符] 返回值类型 方法名(参数类型 参数名, ...) {... return 返回值;}
}

2.2 局部变量

注释:局部变量声明在方法内部,只在当前方法执行时有效

public void 方法名() {类型 局部变量名 [=初期值];
}

2.3 参数传递

(1) 基本类型:值传递

// 先输出x的值(2)
// 再输出i的值(1)
public static void main(String[] args) {int i = 1;test(i);System.out.println(i);
}public static void test(int x) {// 传进来的是i的值,x值变更不影响i的值。x = x + 1;System.out.println(x);
}

(2) 引用类型:地址传递

public class Data {int age = 0;
}// 先输出d2的属性值(2)
// 再输出d1随d2变更了的属性值(2)
public class Main {public static void main(String[] args) {Data d1 = new Data();d1.age=1;test(d1);System.out.println(d1.age);}public static void test(Data d2) {// 传进来的是d1的地址,d2的属性值变更,影响外面d1的属性值一起变更d2.age=2;System.out.println(d2.age);}
}

(3) 可变参数列表

注释:可变参数默认是数组类型,只能有一个可变参数,必须在参数列表的最后。

// 可变参数列表可以实现,动态参数个数的传递
public static void main(String[] args) {test(1, "a");test(2, "a", "b");test(3, "a", "b", "c");String[] strs = {"a","b","c"};test(4, strs);
}public static void test(int p1, String p2...) {// p2是不固定长度的数组
}

3 构造器

注释:构造器在 new 对象() 时调用

public class Test {[修饰符] 类名() { ... }   // 无参构造器(默认。只有无参构造器时不用显示声明)[修饰符] 类名(参数类型 参数名, ...) {... }  // 有参构造器,定义有参构造器后默认无参构造器失效。
}

4 代码块

注释:代码块也叫(实例代码块),代码块代码在每次对象实例化时调用,调用静态方法时不执行,作用是初始化全局变量。

注释:代码块代码由上到下执行,代码块全部执行完再执行构造器。

public class 类名 {{代码块代码...}
}

注释:代码块未声明的变量为全局变量,与全局变量同名局部变量,用局部变量。

public class Test {int a = 0;int b = 1;{int a = 1;int c = 2;System.out.println(a); // 局部变量System.out.println(b); // 全局变量System.out.println(c); // 局部变量}
}

5 内部类

5.1 成员内部类(非静态内部类)

(1) 成员内部类的定义

注释:成员内部类类似成员方法,可访问主类的私有属性,静态变量。

public class 类名 {// 内部类声明在类内部public class 内部类名 {  // 没有修饰符的内部类只能被主类同包的类调用...}
}

(2) 成员内部类的调用

主类.内部类 变量名 = new 主类().new 内部类();  // 内部类的实例化

(3) 内部类对主类同名属性访问

访问主类属性:主类名.this.变量名

访问内部类属性:this.变量名

public class 主类 {public int type1 = 1;public class 内部类 {public int type1 = 2;public void test() {主类.this.type1; //主类属性this.type1;  //内部类属性}}
}

5.2 局部内部类

声明在(方法,构造器,代码块)内部,分为匿名与非匿名。好像没啥用!

public class Test {public void testFn() {class SubTest{void test() {...}}SubTest s = new SubTest();}
}

5.3 静态内部类

(1) 静态内部类定义

public class 主类 {static class 静态内部类 {public static int num = 1;}
}

(2) 静态内部类调用

public class Main {public static void main(String[] str) {主类.静态内部类.属性;主类.静态内部类.方法();}
}

5.4 匿名内部类(重点)

注释:匿名内部类可简化为Lambda表达式(之后再详细介绍)

public void fn() {类 对象 = new 抽象类接口() {抽象方法实现(){…}}
}
http://www.xdnf.cn/news/20222.html

相关文章:

  • 【3D图像算法技术】如何在Blender中对复杂物体进行有效减面?
  • 【EXPLAIN详解:MySQL查询优化师的显微镜】
  • MacOS 使用 luarocks+wrk+luajit
  • Docker 本地开发环境搭建(MySQL5.7 + Redis7 + Nginx + 达梦8)- Windows11 版 2.0
  • Mac Intel 芯片 Docker 一键部署 Neo4j 最新版本教程
  • 【Android 消息机制】Handler
  • PDF教程|如何把想要的网页保存下来?
  • docker 推送仓库(含搭建、代理等)
  • 服务器线程高占用定位方法
  • 使用 Shell 脚本监控服务器 IOWait 并发送邮件告警
  • Python带状态生成器完全指南:从基础到高并发系统设计
  • C#实现导入CSV数据到List<T>的完整教程
  • 【基础-单选】用哪一种装饰器修饰的struct表示该结构体具有组件化能力?
  • Playwright携手MCP:AI智能体实现自主化UI回归测试
  • 第26节:GPU加速计算与Compute Shader探索
  • Homebrew执行brew install出现错误(homebrew-bottles)
  • Go语言后端开发面试实战:谢飞机的“硬核”面试之旅
  • CodeBuddy 辅助重构:去掉 800 行 if-else 的状态机改造
  • Eclipse下的一些快捷键备忘录
  • LangChain实战(十九):集成OpenAI Functions打造强大Agent
  • Day37 MQTT协议 多客户端服务器模型
  • 手写MyBatis第53弹: @Intercepts与@Signature注解的工作原理
  • 工业洗地机和商用洗地机的区别是什么?
  • 【基础-单选】关于bundleName,下列说法正确的是?
  • 波特率vs比特率
  • rh134第三章复习总结
  • 贪心算法应用:保险理赔调度问题详解
  • Java中的死锁
  • 使用 MongoDB.Driver 在 C# .NETCore 中实现 Mongo DB 过滤器
  • [数据结构] ArrayList(顺序表)与LinkedList(链表)