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

Java代码组成部分

一、构造函数与默认构造函数

构造函数,是一种特殊方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

/**
* 矩形
*/
class Rectangle {/*** 构造函数*/public Rectangle(int length, int width) {this.length = length;this.width = width;}public static void main (String []args){//使用构造函数创建对象Rectangle rectangle = new Rectangle(10,5);}
}

特别的一个类可有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分构造函数的重载。

构造函数跟一般的实例方法相似;

与其它方法不同点:

  1. 构造器没有返回类型
  2. 不会被继承,且可以有范围修饰符

构造器的函数名称必须和它所属的类的名称相同。它承担着初始化对象数据成员的任务。

如果在编写一个可实例化的类时没有专门编写构造函数,多数编程语言会自动生成缺省构造器(默认构造函数)。

如果在编写一个可实例化的类时没有专门编写构造函数,默认情况下,一个Java类中会自动生成一个默认无参构造函数。默认构造函数一般会把成员变量的值初始化为默认值,如int -> 0,Integer -> null。

但如果手动在某个类中定义了一个有参数构造函数,那么这个默认的无参构造函数就不会自动添加了。要手动创建!

/**
* 矩形
*/
class Rectangle {/*** 构造函数*/public Rectangle(int length, int width) {this.length = length;this.width = width;}/*** 无参构造函数*/public Rectangle() {}
}

二、类变量、成员变量和局部变量

Java中三种变量:类变量、成员变量和局部变量。分别存放在JVM的方法区、堆内存和栈内存。

    public class Variables {/*** 类变量*/private static int a;/*** 成员变量*/private int b;/*** 局部变量* @param c*/public void test(int c){int d;}}

a作为类变量,存放在JVM的方法区;b作为成员变量,和对象一起存储在堆内存中(不考虑栈上分配的情况);c和d作为方法的局部变量,保存在栈内存。

介绍这三种变量类型,是因为很多人因为不知道这三种类型的区别,所以不知道他们分别存放在哪里,这导致不知道那些变量需要考虑并发问题。

关于并发问题,这里简单说明:

因为只有共享变量才会遇到并发问题,所以,变量a和b是共享变量,变量c和d是非共享变量。所以如果遇到多线程场景,对于变量a和b的操作需要考虑线程安全,而对于线程c和d的操作不需要考虑线程安全。


三、成员变量和方法作用域

通过封装手段,将成员变量、方法等包装在一个类中,那么被封装在类中的这些成员变量和方法,能不能被外部访问呢?能被谁访问呢?

这种能不能被访问、能被谁访问的特性,Java是通过访问控制修饰符来实现。

Java中,可以用访问控制符来保护对类、变量、方法和构造方法的访问,Java 支持 4 种不同的访问权限。

对于成员变量和方法的作用域,public,protected,private及不写间的区别:

  1. public:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可直接访问。
  2. private:表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外其他类或对象都没有访问权限,子类也没有访问权限。
  3. protected:表明成员变量或方法对类自身,与同在一个包中的其他类可见,其他包下的类不可访问,除非是其的子类
  4. default:表明该成员变量或方法只有自己和其位于同一个包的内可见,其他包内的类不能访问,即便是它的子类。
http://www.lryc.cn/news/68216.html

相关文章:

  • vue2和vue3有啥区别,vue3的优点有哪些?
  • 就业内推 | 上市公司招网工,最高25k*14薪,六险一金
  • 低代码让开发变得不再复杂
  • 【前端客栈】使用CSS实现畅销书排行榜页面
  • 【周末闲谈】超越ChatGPT?科大讯飞星火认知大模型
  • 第N2周:中文文本分类-Pytorch实现
  • Salesforce许可证和版本有什么区别,购买帐号时应该如何选择?
  • 接口测试怎么做?全网最详细从接口测试到接口自动化详解,看这篇就够了...
  • DataStore入门及在项目中的使用
  • 用Python爬取中国各省GDP数据
  • 深度学习-第T5周——运动鞋品牌识别
  • 自媒体的孔雀效应:插根鸡毛还是专业才华?
  • Linux系统优化
  • Java笔记_22(反射和动态代理)
  • 前端web入门-HTML-day01
  • 创建一个Go项目
  • 从 Spring 的创建到 Bean 对象的存储、读取
  • 【一文吃透归并排序】基本归并·原地归并·自然归并 C++
  • 读《Spring Boot 3核心技术与最佳实践》有感
  • 板子短路了?
  • 一行代码绘制高分SCI限制立方图
  • spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图
  • excel实战小测第四
  • 什么是SpringBoot自动配置
  • 基于IC5000烧录器使用winIDEA烧写+调试程序(S32K324的软件烧写与调试)
  • 新手开始学【网络安全】要怎么入门?
  • Linux指令 快捷键
  • Testing and fault tolerence考试要点
  • 记一次springboot项目漏洞挖掘
  • R语言 | 数据框