Java对象和类

 

转自原文:http://www.yiibai.com/java/java_object_classes.html

java是一种面向对象的语言。由于具有面向对象特性的语言,Java支持以下基本概念:

  • 多态性
  • 继承
  • 封装
  • 抽象化
  • 对象
  • 实例
  • 方法
  • 消息解析

在本章中,我们将探讨类和对象这些概念。

  • 对象 - 对象具有状态和行为。例如:狗有状态 - 颜色,名称,繁殖以及行为,摇头晃脑,吠叫,吃。对象是类的实例。

  • 类 - 一个类可以被定义为描述行为的模板/蓝色印花/指出其类型支持的对象。

Java对象:

现在,我们深入研究什么是对象。如果考虑到现实世界中,可以发现身边很多对象,汽车,狗,人等,这些对象都有一个状态和行为。

如果我们考虑一只狗,那么它的状态是 - 名称,品种,颜色和行为 - 吠叫,摇摆,跑等

如果软件对象与现实世界中的对象进行比较,它们具有非常相似的特征。

软件对象也有状态和行为。软件对象的状态存储在字段和行为是通过方法如图所示。

因此,在软件开发中,方法上的一个对象的内部状态和操作的对象对对象的通信是通过方法来完成。

Java中的类:

类是从中创建单个对象的蓝图。

类的样本如下︰

public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sleeping(){ } }

一个类可以包含以下任意变量类型。

  • 局部变量:  方法里面,构造函数或块中定义的变量称为局部变量。该变量将被声明和初始化的方法中,当该方法完成该变量将被销毁。

  • 实例变量: 实例变量都在一个类,但任何方法之外的变量。这些变量在类被加载的实例化。实例变量可以从内部的任何方法,构造函数或特定类别的块访问。

  • 类变量: 类变量是在一个类中声明,任何方法之外的变量,用static关键字。

类可以有任意数量的方法来访问各种方法的值。在上面的例子中,barking(), hungry() 和 sleeping()的方法。

以下提到的一些在Java语言中需要寻找到类要讨论的重要议题。

构造函数:

在讨论关于类,其中最重要分课题之一是构造函数。每个类都有一个构造函数。如果我们不明确地写一个构造函数的类,Java编译器生成一个默认构造函数的类。

创建一个新的对象中的每个时间,至少有一个构造函数将被调用。构造函数的主要规则是,他们应该具有相同的名称作为类。一个类可以有多个构造函数。

构造函数的例子如下︰

public class Puppy{ public Puppy(){ } public Puppy(String name){ // This constructor has one parameter, name. } }

Java还支持单实例类,在这里能够创建的类只有一个实例。

创建对象:

如前面提到的,一个类提供的图纸对象。所以基本上一个对象是从一个类创建的。在Java中,关键字 new 用于创建新的对象。

从类创建对象时有三个步骤:

  • 声明:  变量声明,一个变量名的对象类型。

  • 实例: “new”关键字是用来创建对象。

  • 初始化:  关键字 new 后跟调用一个构造函数。这个调用初始化新的对象。

创建对象的实例在下面给出:

public class Puppy{ public Puppy(String name){ // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public static void main(String []args){ // Following statement would create an object myPuppy Puppy myPuppy = new Puppy( "tommy" ); } }

如果我们编译并运行上面的程序,那么这将产生以下结果:

Passed Name is :tommy

访问实例变量和方法:

实例变量和方法是通过创建的对象的访问。要访问一个实例变量的完全限定路径应该如下:

/* First create an object */
ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();

例子:

这个例子说明了如何访问一个类的实例变量和方法:

public class Puppy{ int puppyAge; public Puppy(String name){ // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public void setAge( int age ){ puppyAge = age; } public int getAge( ){ System.out.println("Puppy's age is :" + puppyAge ); return puppyAge; } public static void main(String []args){ /* Object creation */ Puppy myPuppy = new Puppy( "tommy" ); /* Call class method to set puppy's age */ myPuppy.setAge( 2 ); /* Call another class method to get puppy's age */ myPuppy.getAge( ); /* You can access instance variable as follows as well */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }

如果我们编译并运行上面的程序,那么这将产生以下结果:

Passed Name is :tommy Puppy's age is :2 Variable Value :2

源文件中声明的规则:

正如本节的最后部分现在让我们看看到源文件中声明的规则。声明类,import语句和包声明在源文件时,这些规则是必不可少的。

  • 只能有一个有public类在每一个源文件。

  • 源文件可以有多个非公共类。

  • 公共类名应该是源文件,以及应当由 .java 在末尾附加的名称。例如:类名是 public class Employee{} 将源文件应为 Employee.java

  • 如果类在包中定义,那么 package 语句应该是在源文件中的第一条语句。

  • 如果 import 语句都存在,那么它们必须写 package 语句和类声明之间。如果没有包(package)语句,那么import语句应该是源文件中的第一行。

  • 导入和包语句将意味着对所有现有的源文件中的类。不可能的声明不同的 import和/或包语句不同类的源文件中。

类有几个访问级别,有不同类型的类,抽象类,final类等将在访问修饰符章解释这些。

除了上述类型的类,Java也有一些特殊的类称为内部类和匿名类。

Java包:

简单地,它是分类的类和接口的方式。在开发Java应用程序中,数以百计的类和接口将会被写入,因此,分类这些类是必须的。

import语句:

在Java中,如果一个完全合格的名称,其中包括包和类名,变量的话,编译器可以很容易地找到源代码或类。 import语句是给予适当的位置,是编译器发现,特定的类的方法。

例如,下面的行会要求编译器来加载所有目录中 java安装/java/io 可用的类:

import java.io.*;

一个简单的案例:

对于研究案例,这里将创建两个类。他们是 Employee 和 EmployeeTest

首先打开记事本,并添加下面的代码。请记住,这是Employee类和类是一个公共类。现在,保存名称为 Employee.java 这个源文件。

Employee类有四个实例变量的名字,年龄,名称和工资。这个类有一个明确定义的构造函数,它接受一个参数。

import java.io.*; public class Employee{ String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name){ this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge){ age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig){ designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary){ salary = empSalary; } /* Print the Employee details */ public void printEmployee(){ System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } }

正如先前在本教程中所提到的,从处理的 main 方法开始。因此,为了让我们运行这个Employee类中应该有 main 方法,并应创建的对象。我们将创建这些任务一个单独的类。

下面给出的是 EmployeeTest 类,它创建 Employee类的两个实例,并调用方法为每个对象的每个变量赋值。

下面的代码保存在 EmployeeTest.java 文件

import java.io.*; public class EmployeeTest{ public static void main(String args[]){ /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created empOne.empAge(26); empOne.empDesignation("Senior Software Engineer"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("Software Engineer"); empTwo.empSalary(500); empTwo.printEmployee(); } }

现在,编译这两个类,然后运行EmployeeTest看到的结果如下:

C :> javac Employee.java C :> vi EmployeeTest.java C :> javac EmployeeTest.java C :> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0

转载于:https://www.cnblogs.com/yccmelody/p/5470316.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj3224 Tyvj 1728 普通平衡树题解--Treap

题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数&…

Blazor University (18)使用 RenderFragments 模板化组件 —— 创建 TabControl

原文链接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/创建一个 TabControl 组件源代码[1]接下来我们将创建一个 TabControl 组件。这将教您如何实现以下目标:将数据传递到 RenderFragment 以为其…

Java之GC机制

1 JVM基本结构 1)类加载器classLoader:在JVM启动时或者类运行时将需要的.class文件加载到内存中 2)内存区域(运行时数据区): 是在JVM运行的时候操作所分配的内存区 3)执行引擎:负…

ArcGIS实验教程——实验十八:叠置分析(Overlay Analysis)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 目 录 一、实验描述 二、实验内容 三、实验目的 四、实验数据

《零基础看得懂的C语言入门教程 》——(一)脱离学习误区

本节视频连接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C语言学习有些误区你应该知道,这样学习起来事半功倍~一、前言 距离上一次编写C语言的教程是5年前了(2015年),由于自己是从初一时开始学习编程&#…

一套完整的导视设计案例_色彩导视艺术:乌克兰基辅语言学校导视设计案例

学校导视设计案例建筑师Emil Dervish为乌克兰基辅Underhub语言学校设计了色彩缤纷的导视系统,该设计灵感来源于伦敦地铁,他希望通过彩色线条的大胆应用来营造轻松而欢乐的氛围。让我们一起来看看这座由“彩虹”做导视的学校。彩虹导视设计跟着红色导视线…

C# 创建匿名管道

下面对匿名管道执行类似的操作。通过匿名管道,创建两个彼此通信的任务。为了给管道的创建发出信号,使用 ManualResetEventSlim 对象,与内存映射文件一样。在 Program 类的 Run 方法中,创建两个任务,调用 Reader 和 Wri…

内测投票

create table DiaoYanTiMu (  Ids int(10) auto_increment not null primary key(),//把所需要的都写上中间不需要符号隔开,设自增长列类型必须是int,主键的话必须不能为空not null, Title varchar(50) not null );/…

Android之通过Binder机制实现IPC和linux的传统IPC的对比分析

一、 Android的Binder机制实现IPC 这里bind机制实现实现IPC模型这里不具体分析,简单理解就是clint-server模型 涉及到4个模块client、server、serverManager、bind底层驱动。 serverManager的作用是将字符形式的Binder(Server创建了Binder实体)名字转化成Client中对该Bin…

Mysql 查询统计练习

2019独角兽企业重金招聘Python工程师标准>>> 1、建表 customers 顾客表 products 产品表 orders 订单表 -- 顾客表 CREATE TABLE customers (c_id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255),firstname VARCHAR(255),address VARCHAR(255),birthday DATETI…

【经典回放】多种语言系列数据结构算法:堆排序

目录 一、堆排序算法分析 二、C#语言实现堆排序 三、C语言实现堆排序 一、堆排序算法分析

C++11模版元编程的应用

1.概述 关于C11模板元的基本用法和常用技巧,我在程序员2015年2月B《C11模版元编程》一文(后称前文)中已经做了详细地介绍,那么C11模版元编程用来解决什么实际问题呢,在实际工程中又该如何应用呢?本文将侧重…

《零基础看得懂的C语言入门教程 》——(二)C语言没那么难简单开发带你了解流程

一、学习目标 了解DevC集成开发环境了解集成开发环境了解HelloWorld程序了解HelloWorld程序的编写方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇&#xff1…

11选5下期算法_本周六周日【高二直播】辅导网课预告:通用技术电控二三极管、多用电表测量、数字逻辑电路、解析枚举递归算法,2022浙江选考技术...

01第19-21讲 2020年11月28日29日开课目录鲸学名师考点精讲系统提高高二共3阶段精品课夯实基础冲刺技术选考97-100分!11月28日【高二|提高|直播】高二精品直播课讲授:浙江选考技术科目第19讲 高二综合提高鲸学名师讲授高中通用技术:第19讲 电控…

十分钟完成Bash 脚本进阶!列举Bash经典用法及其案例

前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神。虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧&am…

【经典回放】多种语言系列数据结构算法:基数排序

目录 一、算法思路 二、C#语言实现 三、C语言实现 一、算法思路 1. 思想基础 基数排序的思想就是先找出待排序中的最大者,然后按最大者申请一个足够大的内存空间,并将其初始化为零,然后将所有待排序的数装入其中,标记装入的数…

Java之ThreadPoolExcutor和四种常见的线程池

一、ThreadPoolExcutors的作用 java提供了ThreadPoolExcutors来创建一个线程池,我们为什么要用线程池呢? 1.降低资源的消耗:通过重复利用已经创建好的线程降低线程的创建和销毁带来的损耗 2.提高响应速度:因为线程池中的线程处于等待分配任…

探索链路追踪在.NET6工业物联网项目中的应用

如果觉得有用,请留言学到了。已经会了的老哥,请留言就这?可能遇到的问题工业物联网系统自上而下一般分为ERP、Mes、SCADA、WCS、边缘网关、设备等一个生产订单从SAP发送到设备要经过上述多个系统,当某个环节出现问题,可…

《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序

一、学习目标 了解C语言代码的一般结构了解函数的概念了解printf函数的使用方法了解头文件的概念了解system函数的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误…

hdu_1728_逃离迷宫(bfs)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS剪枝应该也能过,用BFS就要以拐角作为增量来搜,即以当前点为坐标,4…