重载武器 - 维基百科,自由的百科全书
hwazhu 2025-06-19 14:15 10 浏览
序言
类和对象是OP语言的一个重要的知识点,抽象性很高,我们学习起来可能会有一些疑惑,今天我们好好谈谈这个知识点,若有错误,还请诸位斧正。
初阶
在初阶里面我们需要理解什么是类,如何实例化一个对象。
类
类(英语:class)在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的特性和方法。 支持类的编程语言在支持与类相关的各种特性方面都多多少少有一些微妙的差异。大多数都持不同形式的类继承。许多语言还支持提供封装性的特性,比如访问修饰符。类的出现,为面向对象编程的三个最重要的特性( 封装性、继承性、多态性 ),提供了实现的手段。 来源:(维基百科)
对象
在计算机科学中,对象(英语:object),台湾译作 物件 ,是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。 在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)。 来源:维基百科
总结
- 类就是一个模子 我们根据这个模子来造东西
- 对象就是一个实体,我们通过模子构造出的实体
正式内容
类的组成
我们来看看类的组成。
class 类名 {
字段;(或者称 成员属性)
方法;
}
我们以一个例子来具体看看类的组成
class Person {
public String name; //允许赋值
public int age;
public static int size = ;
public void eat() {
//注意 在方法内部只可以定义局部变量
// public int a = ; 报错
System.out.println(eat!!!);
}
public static void sleep() {
System.out.println(sleep!!!);
}
}
字段
字段 又称 “成员变量”,像下面的 name、 age、size 就是字段,这里的的字段又分为两种
- 实例成员变量 未用static修饰
- 静态成员变量 用static修饰
public String name; //允许赋值
public int age;
public static int size = ;
这些不同留在下面说
方法
方法又称行为。类中的方法也分为两种,和字段一样看static是否修饰
- 实例成员方法
- 静态成员方法
public void eat() { //实例成员方法
System.out.println(eat!!!);
}
public static void sleep() { //静态成员方法 用static
System.out.println(sleep!!!);
}
至于这两者的不同,我后面会重点谈到,先放一放
实例化一个对象
一个类可以实例化多个对象,在堆上开辟相应的空间
class Person {
//实例成员变量
public String name;
public int age;
//静态成员变量
public static int size = ;
//实例成员方法
public void eat() {
System.out.println(eat!!!);
}
//静态成员方法
public static void sleep() {
System.out.println(sleep!!!);
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();//实例化一个对象
}
}
重点讲解static
static修饰与否会产生天差地别的不同
字段的不同
使用的不同
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();
per.age = ; //引用对象
Person.size = ; //引用类 static修饰的字段和方法使用时需要引用类名
}
}
开辟空间的位置不同
- 实例成员变量在 堆 上开辟
- 静态成员变量在方法区去开辟
由于静态成员变量开辟在方法区,所以可以说不在对象里面,可以这样说我们可以开辟多个对象,但这些对象“ 共用 ”静态成员变量
public class TestDemo2 {
public static void main(String[] args) {
Person per1 = new Person();
Person per2 = new Person();
per1.age = ;
Person.size = ;
System.out.println(per1.age);
System.out.println(per2.age);
System.out.println(Person.size);
}
}
方法的不同
某种意义上,静态成员方法的的要求更为严格,限制更多,这里我就不截图的
- 静态成员方法只能调用静态成员方法,而实例成员方法不做要求
- 静态成员方法里面不能出现实例成员变量,而而实例成员方法不做要求
访问修饰限定符
我们刚才谈了很多,不过有一个词没有谈到,就是public。public是一个访问修饰限定符,让我们看看这些内容都有什么。这里我们重点谈的是private,也就不得不提到 封装
访问修饰限定符
- public: 共有的
- private: 私有的
- protected 受保护的
- default : 默认权限 -> 包访问权限(后面会说)
封装
在面向对象编程方法中, 封装 (英语:Encapsulation)是指,一种将抽象性函数接口的实现细节部分包装、隐藏起来的方法。同时,它也是一种防止外界调用端,去访问对象内部实现细节的手段,这个手段是由编程语言本身来提供的 。 来源:维基百科
我们通过private将自己的写的方法封装起来,避免用户随意修改我们的代码,另外提供一个接口,方便用户使用。
class Person {
private String name; //封装
private int age;
public void setName(String name) {
this.name = name; //this是一个关键字
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();
per.setAge();
per.setName(读者);
System.out.println(per.getName());
System.out.println(per.getAge());
}
}
this关键字我们这里现在是不谈,后面我会再写一篇博客将关键字好好的的谈一谈,在这里我们就需要知道this.data 代表对象里的字段就可以了
构造方法
构造方法也是一种方法,不给他比较特殊
- 构造方法的类名和方法名相同
- 没有返回值,注意 是没有,而不是返回值是void
一个对象的产生分为几步 两步
- 为对象分配内存
- 调用合适的构造方法
也就是说 构造方法一定参与对象的实例化
class Person{
public String name;
public int age;
public Person() { //构造方法
System.out.println(构造方法);
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();
}
}
上面的 Person() 就是一个构造方法。
- 问:之前我们也没有写过构造方法啊,为什么还可以实例化对象? 答:因为编译器自动帮我们写了一个不带参数的构造方法,我们就不需要构造了
- 问:构造方法是如何调用的? 答: Person per = new Person();中的Person(),就是调用
问题一
class Person{
public String name;
public int age;
public Person(String name) {
System.out.println(构造方法);
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();
}
}
- 为什么会报错 答:当我们自己写构造方法时,编译器便不再为我们自动生成了,我们实例化对象时调用的构造方法参数不对
问题二
- 问:可以存在多个构造方法吗 答:可以 构造方法也是遵从函数重载的
样例一
class Person{
public String name;
public int age;
public Person() {
System.out.println(构造方法1);
}
public Person(String name) {
System.out.println(构造方法2);
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person();
}
}
样例二
class Person {
public String name;
public int age;
public Person() {
this.sleep();
}
public Person(String name) {
this();
//this();
this.name = name;
}
public Person(int age) {
this.age = age;
}
public void sleep() {
System.out.println(sleep());
}
}
问题三
- 问:构造方法可以互相调用吗 答: 可以,不过this()调用时只能在第一行,也就是说一个构造方法只能调用一次另一个
class Person{
public String name;
public int age;
public Person() {
System.out.println(构造方法1);
}
public Person(String name) {
this();
System.out.println(构造方法2);
}
}
public class TestDemo2 {
public static void main(String[] args) {
Person per = new Person(xm);
}
}
代码块
代码块这个知识点我们不太常用,不过为了知识的完整性,我们还是把这个模块说一下吧.代码块分为以下几种
- 普通代码块 定义在方法中的代码块
- 构造块 定义在类中的代码块(不加修饰符)。也叫: 实例代码块 。构造代码块一般用于初始化实例成员变量
- 静态块 使用static定义的代码块。 一般用于初始化静态成员属性
- 同步代码块 这个不说
这里我们重点说一下构造快和静态块,下面一个代码就可以搞定
==从下面我们可以看出,静态块先执行,接着是实例代码块,后面才是构造方法.==这个顺序大家先记住.
class Test {
public int age;
{
System.out.println(这是一个 实例代码块 !!!);
}
static {
System.out.println(这是一个静态代码块 !!!!);
}
public Test() {
System.out.println(这是一个构造方法!!);
}
}
public class TestDemo {
public static void main(String[] args) {
Test test = new Test();
}
}
进阶
看完上面的内容,想来你已经对类和对象有一定的了解了。下面的知识是关于一些常见问题的解答。我们一起来看看.
来看看这些问题把
下面代码是否可以编译通过
public class TestDemo { public int data; public static int n = ; public static void main(String[] args) { TestDemo testDemo = new TestDemo(); this.n = ; } }
很抱歉,this关键字是对当前对象的引用,static修饰的成员变量和成员方法不在 对象 里面,所以编译不通过
下面的代码是不是报错.
class Test { public static int age = ; } public class TestDemo { public static void main(String[] args) { Test test = null; System.out.println(test.age); System.out.println(Test.age); } }
不会报错,static修饰的变是不属于对象的,即使我们没有new对象,也会得到结果
那我们再看看下面的代码
class Test { public static int n = ; public static void hello() { static int m = ; } public void func() { static int k = ; } }
这个更简单,由static修饰的变量 定义 在方法区中,无论是静态方法还是普通成员方法
看看下面的代码块静态代码块只能出现一次
class Test { public int age; { System.out.println(这是一个 实例代码块 !!!); } static { System.out.println(这是一个静态代码块 !!!!); } public Test() { System.out.println(这是一个构造方法!!); } } public class TestDemo { public static void main(String[] args) { Test test1 = new Test(); System.out.println(================); Test test2 = new Test(); } }
总结一点
- 静态的成员是不能在方法中定义的
- this关键字无法引用static修饰的方法或者变量
- 静态代码块只能出现一次,即使不用实例化对象也可以执行,具体需要到JVM才可以.
原文链接:
https://blog.51cto.com/u_15132397/?utm_source=tuicool&utm_medium=referral
相关推荐
- 岳飞传(1994年徐少强主演的电视剧)
-
香港亚视(ATV)电视剧(第部)大盘点亚洲电视(ATV):香港第一家电视台,也是全球首家华语电视台。年5月日开业时名为丽的映声,年更名为丽的电视,年9月日改名为亚洲电视。盘点年香港亚视(ATV)出品的...
- 黑帮大佬和我的365日 365 dni (2020) - 豆瓣电影
-
《黑帮大佬和我的日》:波兰对意大利的幻想之作7年前一部《五十度灰》大红,打响霸总类情欲片市场,EllieGoulding的一首主题曲《LoveMeLikeYouDo》完美诠释这部电影的爱情...
- 三国 (1-95)全集-电视剧-高清正版在线观看-爱奇艺
-
元宵节的作文(精选篇)年,新加坡电视媒体做了一个世纪华语经典电视剧的选评活动,评出了至年共年间华语地区所制作的经典电视剧集一百部。新加坡电视媒体仅将该榜单前部进行了排名,其余部排名不分先后。新加坡电视...
- 《国色芳华》阿里云盘百度云网盘【1080P高清】下载_高清电影
-
《国色芳华》手机壁纸...
- 《少年犯1985》电影免费观看全集高清完整版-七哦影视
-
还记得老电影《少年犯》吗?记者走进高墙,看犯下罪错的孩子如何链接社会……“妈妈,妈妈,儿今天叫一声妈,禁不住泪如雨下……”年前,一部名为《少年犯》的电影轰动了全国,电影的主题曲《心声》更是让无数人落泪...
- 天地粮人-电视剧-全集高清完整版免费在线观看-第一美剧
-
天地粮人集最近,一部反腐题材的电视剧《人民的名义》强势刷屏,让沉寂多年的反腐剧再次引发大众强烈关注。说起来,我们还真的是好多年都没有再看过反腐剧了。在我们的记忆中,以前还是有很多不错的反腐剧的。那就让...
- 神勇投弹手_1_高清1080P在线观看平台
-
电影频道暑假豪华片单重磅来袭类型丰富主题多元为庆祝七一党的生日,丰富社区居民的精神文化生活,年6月日晚七点,南京太平苑社区在小广场上播放了爱国主义战争题材的电影《神勇投弹手2》。本部电影主要讲述了:...
- 珠光宝气 粤语版-电视剧-全集高清正版视频-爱奇艺
-
《珠光宝气》首播十周年“贺峰”岳华在加拿大离世《创世纪》年刚出的时候就守着电视看,后来读书的时候又重温了一遍,当时只觉得其中人物各个丰满,情节跌宕起伏,十分好看。现在三十而立,再看又是别样一翻滋味。...
- 青春期撞上更年期-电视剧-完整版在线观看-爱奇艺
-
青春期撞上更年期当青春期孩子撞上更年期的你,鸡飞狗跳,还是鸡飞蛋打?**青春期与更年期的碰撞:重塑家庭对话的条黄金法则**当荷尔蒙的激荡与激素的衰退相遇,家庭关系可能成为一场“情绪雷区”。父母需要以“...
- 《危机边缘 (第四季)》在线观看 - 美剧 - 美剧网
-
平行宇宙都来人了,《危机边缘》,一部充满想象力的美剧神剧如果说有哪部剧集让我可以反复的看,《危机边缘》应该算是我的备选之一。对于大多数国内的美剧爱好者,《迷失》和《越狱》应该是入门级的美剧,其中《迷失...
- 狂怒 - 4K HDR高清在线观看 - 4K-AV
-
土豪专用看片神器,4K画质嗨上天前言前段时间,有些小伙伴纷纷私信向我询问。某些游戏在PS5上有没有4K60帧。因为PS5主机有向下兼容功能,很多PS4游戏都有强化。自然很多人想知道到底有哪些游戏在PS...
- 光荣之路 - 维基百科,自由的百科全书
-
光荣之路每周一部电影,这次看的是《光荣之路》。战争片是个很神奇的电影类型,我小的时候很喜欢看,喜欢大银幕中枪林弹雨、炮火连天的战斗场面,喜欢指挥若定的将军和无惧生死的英雄。长大后有段时间却不喜欢看了,...
- 《乱战》电影完整版免费在线观看『极速高清』 - 蜂鸟影院
-
欧美动作电影:杰森.斯坦森主演部作品,速度与激情、致命快递《蜂鸟特攻》主演:杰森·斯坦森阿加塔·布泽克薇琪·麦克卢尔本德里克特·王盖·莱恩导演:斯蒂文·奈特简介:一年前,作为特种部队一员的约瑟夫·史...
- 傻春-电视剧-全集高清正版视频-爱奇艺
-
《甄嬛传》的演员,有多少是《傻春》里的?好多个那个年代的人的探索与承受的苦难,是可敬可佩的。回味着那个年代的故事、那份情感!以下盘点十部,看过十部的至少是后。如有补充的那绝对后往前。老农民主演:陈宝...
- 任长霞(2005年沈好放导演电视剧)
-
刘佳:演任长霞,忐忑却也得到一生的洗礼丨“星火燎原”系列访谈4月日,国内首部徽墨文化大剧《家业》正式杀青,该剧由爱奇艺和华策克顿旗下宽厚文化联合出品,该剧讲述了李家八房幺女李祯为解决生计毅然走上制墨之...
- 一周热门
-
-
前哨2020_电影_高清完整版视频免费在线观看_影视窝
-
乱战 - 维基百科,自由的百科全书
-
妙手仁心2国语-妙手仁心2国语在线观看-电视剧-星空影视
-
天生一对 The Parent Trap (1998) - 豆瓣电影
-
陈慧翎导演的言情偶像电视剧-爱情自有天意-完整版免费在线观看
-
秋蝉电视剧在线观看 - 西瓜视频
-
《新杨门女将电视剧1》喜剧片高清完整版免费在线观看 - 西瓜影院
-
梦回_01 - 免费视频 - 中国 - 电视剧 - 古装 - 爱情,剧情 - 李兰迪,王安宇,辛云来,孙安可
-
敦刻尔克-电影-完整版在线观看-爱奇艺
-
罗马假日 (2017)-罗马假日 (2017)在线观看-电影-星空影视
-
- 最近发表
- 标签列表
-