Java 面向对象语言基础
面向过程
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象
是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
1、 区分类、对象和对象的引用
对象
:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类
:类是一个模板,它描述一类对象的行为和状态。
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
声明
:声明一个对象,包括对象名称和对象类型。实例化
:使用关键字new来创建一个对象。初始化
:使用new创建对象时,会调用构造方法初始化对象。
public class Ch_4_1{public static void main(String[] args) {Pet a=new Pet(); //根据Pet类创建出一个对象System.out.println("A Pet object is created.");a.name="Snoppy"; //修改对象的状态,即对属性成员赋值a.showMe(); //操控对象的行为(或调用对象对外提供的服务)}
}
class Pet{String name; //定义成员变量void showMe(){ //定义成员方法System.out.println("Hi, I'm "+name +" !"); }
}
运行结果
A Pet object is created.
Hi, I'm Snoppy !
【说明】
- 类中的内容统称为成员 ----> 成员变量、成员方法。
- 只能通过引用名来操控对象,不能通过属性值。如本例中的a.name、a.showMe(),均为正确写法。
- 一个Java文件可包含多个类,但是只能存在一个public修饰的类,因为文件名必须与public类同名。若无public类,则文件取名只要满足标识符命名规则即可。文件中每个类(或接口),编译后都会产生一个单独的.class文件与之对应。
- 类成员可以缺省,俗称空类
class Species{}
对象和对象引用的内存管理
1、内存空间的自动管理机制:基于栈的内存管理模式
特色:栈空间的数据被系统自动管理,即在函数调用时自动创建数据空间,在函数运行结束时自动释放数据空间。栈空间中的数据与特定函数直接相关。程序员在函数中定义的所有变量,无论是基本类型还是引用类型,均存储在栈空间。
2、内存空间的手动管理机制:基于堆的内存管理模式
特色:在程序中给出申请或释放内存单元的指令,可实现内存单元的按需分配或释放。其中堆是一种无结构的内存区域,用于执行期间内存单元的动态分配和释放。所有对象均存储于堆空间。
2、 构造函数
关于java类中的构造方法:
构造方法又被称为构造函数/构造器/Constructor
构造方法语法结构:
[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}普通方法的语法结构:
[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体
}对于构造方法来说,“返回值类型不需要指定,并且也不能写void,
只要写上void,那么这个方法变成普通方法构造方法的方法名必须和类名保持一致
构造方法的作用?
-构造方法存在的意义是,通过构造方法的调用,可以创建对象
-初始化实例变量的内存空间构造方法应该怎么调用?
-普通方法:方法修饰符中有static的时候:类名.方法名(实参列表)、方法修饰符列表中没有static的时候:引用.方法名(实参列表)
-new 构造方法名(实参列表)构造方法调用之后,有返回值吗?
每一个构造方法实际上执行结束后都有返回值,但是这个"return值;"这样的语句不需要写。构造方法结束的时候java程序自动返回值 并且返回值类型是构造方法所在类的类型,由于构造方法的返回值类型就是类本身,所以返回值类型不需要编写
当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器
当一个类显示的将构造方法定义出来了,那么系统不再默认为这个类提供缺省构造器。建议手动提供
构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成方法重载机制
public class ConstructorTest01 {public static void main(String[] args) {User u1 = new User();User u2 = new User(10);User u3 = new User("zhangsan");User u4 = new User(10,"zhangsan");//有static的方法调用,同一个类中类名可要可不要ConstructorTest01.dosome();dosome();//无static的方法调用,需要先创建对象ConstructorTest01 t = new ConstructorTest01();t.doOther();}public static void dosome() {System.out.println("do some!");}public void doOther() {System.out.println("do other!");}
}
运行结果
带有int类型参数的构造器
带有String类型的构造器
带有int,String类型的构造器
do some!
do some!
do other!
public class User {//无参数的构造方法public User(){System.out.println();}//有参数的构造方法public User(int i) {System.out.println("带有int类型参数的构造器");}public User(String name) {System.out.println("带有String类型的构造器");}public User(int i,String name) {System.out.println("带有int,String类型的构造器");}}
运行结果
构造函数 P() 被执行!
构造函数 B() 被执行!
构造函数 C() 被执行!
显然,若要构造出C的对象,必须先构造出其源自超类B的对象部分。同理,要构造出B的对象,则应先构造出A的对象部分。这说明在构造子类时,会自动调用超类的构造函数,调用次序与派生次序相同。
☁ 空指针引用
所谓空指针引用,就是当引用变量未关联任何对象时,却引用其成员。
public class Ch_4_7{public static void main(String[] args){C c=new C();//c.b=new B();c.b.a=new A();//System.out.println(c.b.a.x); //此句运行时报错C c1=new C();}
}class A { public int x;}class B { public A a; }class C { public B b; }
☁ 相等判断
对象相等有两层含义:
1)两对象实为同一对象,即对象的起始地址相同;
2)两对象不是同一对象,但对象的特定属性值对应相等。
/*本例表明:A的equals()与String的equals()功能不同;*前者作用等同于"==";*后者是判断“字符串字面量的值”是否相同;**/public class Ch_4_8{public static void main (String[] args) {A a=new A(); A b=new A();System.out.println(a==b); //输出false。因为a、b指向不同的对象System.out.println(a.equals(b)); //输出false。因为a、b指向不同的对象String s1=new String("abc");String s2=new String("abc");System.out.println(s1==s2); //输出false。因为s1、s2指向不同的对象System.out.println(s1.equals(s2)); //输出true。因为s1和s2存储的字符串值相同}
}
class A{int x=5;}
Java 面向对象语言基础相关推荐
- java面向对象语言_Java到底是不是一种纯面向对象语言?
英文原文:Why Java Is a Purely Object-Oriented Language Or Why Not Java是否确实是 "纯面向对象"?让我们深入到Java ...
- 使用JAVA面向对象语言,完成五子棋应用功能设计
前言 在信息科技时代,开发一款用于休闲的五子棋游戏,既可以提升自己的编程能力,又可以作为开发项目的实战练习. 也许人们会说,现在市面上已经有很多相关的应用了,我们设计这个游戏还有什么用吗 ...
- java和其他语言相比 特点,【单选题】与其他面向对象语言相比,Java语言突出的特点是:...
[单选题]与其他面向对象语言相比,Java语言突出的特点是: 更多相关问题 55 A fresh B soft C deep D warm 13 Many economists have given ...
- Java——一种彻底的面向对象语言
在 Java 世界里,Everything is object.也就意味着 Java 是一种彻底的面向对象语言,彻底对应着everything. 使用 Java 无论想实现何种代码逻辑,首先需要定义类 ...
- java 翻译 go语言_【翻译】go是面向对象语言吗?
前言 为了真正理解面向对象的含义,我们需要回顾一下这个概念的起源.第一个面向对象语言-simula问世于19世纪60年代.它引入了对象(object).类(class).继承(inheritance) ...
- java练习_Java基础笔试练习(一)
Java基础笔试练习(一) 1. 若在某一个类定义中定义有如下的方法: abstract void performDial( ); 该方法属于() ? A.本地方法 B.最终方法 C.静态方法 D.抽 ...
- JAVA面向对象的基础知识快速通过---自学笔记(一)
网上的教学很多,看视频非常浪费时间,看文字快点,快速捡起知识点,我只根据我学到的,集各种教学学习,把精华提取出来,把主要概念通俗的展示出来,基本常识就不介绍了,其他的资料谁看了都能看懂,只是java特 ...
- Java的语言基础(一)
Java的语言基础(一) Java是一种跨平台面向对象语言,他可以通过JVM(虚拟机)用于windows操作系统.Linux操作系统 Ios操作系统,但是J不能说jvm跨平台因为如果说jvm跨 ...
- Java万字长文基础知识总结
面向对象概念 面向对象和面向过程的区别? 面向过程:面向过程性能比面向对象高.因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机.嵌入式开发.Linux/ ...
最新文章
- CentOS查看CPU、内存、网络流量和磁盘 I/O
- 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
- 分解得到的时频域特征_【推荐文章】基于变分模态分解和广义Warblet变换的齿轮故障诊断...
- Markdwon中多张图片的并排显示(Mardown的灵动使用技巧)
- 我在PMCAFF,感觉身体被掏空
- Spring MVC 数据验证——validate注解方式
- MyBatis 源码解读-带着问题去看源码
- QT+FFMPEG实现视频播放
- mysql恢复语句报错_php对于mysql恢复数据的时候,只能恢复一条!然后就会报错!但把sql语句直接贴到数据库里面是可以执行的!...
- 克拉克拉(KilaKila):大规模实时计算平台架构实战 1
- 四周第五次课(1月6日) 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩
- [2005/05/03] 卡耐基选语
- java移动元素_如何通过箭头键连续/平滑地移动元素?
- mysql索引如何分裂节点_从MySQL Bug#67718浅谈B+树索引的分裂优化(转)
- 黑马程序员__银行业务调度系统
- vue-scroller回到顶部
- 中国医科大学计算机学院,中国医科大学是一个什么水平的大学?
- HeartBeat简单介绍和基本作用:
- 完美收官 | IOTE第十八届国际物联网展精彩落幕,美格智能参展回顾
- 未来计算机行业哪个吃香,男孩子未来最吃香的十大行业
热门文章
- LeetCode 第 206 场周赛(733/4491,前16.3%)
- LeetCode MySQL 1532. The Most Recent Three Orders(dense_rank + over窗口函数)
- LintCode解题目录
- selenium定位输入框_[Selenium 粗浅笔记] 用Selenium填写表单
- python中常见的15中面试题
- python导入gif_Python之GIF图倒放,沙雕快乐源泉!我已经笑了一天了!
- 安利几个优质NLP开源项目!搜索、问答、情感分析…
- 对比学习有多火?文本聚类都被刷爆了…
- 互联网企业安全之端口监控
- Java多线程系列(一):最全面的Java多线程学习概述