Java的对象和类
以下内容引用自http://wiki.jikexueyuan.com/project/java/object-classes.html:
一、概述
Java是一种面向对象的语言。作为一种具有面向对象特征的语言,Java包括以下几项基本概念:
- 多态性
- 继承性
- 封装性
- 抽象性
- 类
- 对象
- 实例
- 消息解析
什么是类和对象:
- 对象:对象具有状态和行为。比如现实世界的:小汽车,狗,人类等等。所有这些对象都具有状态和行为。
- 类:类可以被定义为描述对象支持类型的行为、状态的的模板、蓝图。
二、Java中的对象
如果考虑一条狗,那么它的状态就是:名字,品种,颜色,它的行为就是汪汪,摇尾巴,跑。
如果将软件中的对象和现实世界中的对象对比,那么会发现他们有很多相似的特征。软件中的对象也具有状态和行为。软件的状态被储存在文件中,它的行为通过方法来表现。
因此,在软件发展过程中方法控制对象的内在状态并且对象和对象间的交流是通过方法来完成的。
三、Java中的类
类是有独立的对象创造出的蓝图。
下面给出了一个类的例子:
public class Dog{
String breed;
int age;
String color; void barking(){
} void hungry(){
} void sleeping(){
}
}
类可以包括以下的变量类型:
- 局部变量:在方法,构造器或区域中定义的变量成为局部变量。变量将会在方法内产生和发展,然后当方法结束变量就会破坏。
- 实例变量:实例变量是在类内,但是在方法外的变量。这些变量是当类被装载时被实体化的。实例变量可以是从特定类的任何方法,构造器,区域中存取。
- 类变量:类变量是在类中声明的变量,它处在任何方法之外,有静态关键字。
类可以由任意数量的方法来存取不同种类方法的值。在上面的例子中,barking()
,hungry()
和sleeping()
是方法。
四、构造器
每一个类都有一个构造器。如果不单独为一个类编写构造器那么Java的编译器将会给这个类建立一个默认的构造器。
每当一个新的对象被创建,至少一个构造器将会被调用。构造器的一个最主要的原则就是他们必须和类有同样的名字。一个类可以有不止一个构造器。并且没有返回值。
下面给出了一个构造器的例子:
public class Puppy{
public Puppy(){
} public Puppy(String name){
}
}
在需要只创建一个类的实例的时,Java也支持单例。
五、创造一个对象
如前所述,类为对象提供了蓝图。因此基本来说一个对象是从一个类中创造出来的。在Java中,新的关键词被用来创造新的对象。创建类的步骤如下:
- 声明:变量声明可以声明其所代表的对象类型。
- 实例化:“新的”关键词用来创造对象。
- 初始化:“新的”关键词伴随着一个构造器的启用,这个将新的对象初始化。
下面给出了一个创造对象的例子:
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
七、源文件声明规则
当在源文件中声明类,输入和打包语法时,这些规则是十分重要的。
- 每个源文件中只能有一个公共类。
- 一个源文件可以有很多非公共类。
- 公共类的名称必须是源文件的名称同时也要以
.java
为后缀。举例来说:类的名称是public class Employee{}
,那么源文件就应该是Employee.java
。 - 如果类是在一个程序包中定义的,那么程序包的声明必须是源文件的第一个声明。
- 如果输入声明出现那么他们必须被写在封装声明和类声明之间。如果没有封装声明那么输入声明必须在源文件的第一行。
- 输入和打包声明会暗示所有源文件中的存在的类。在源文件中很难为不同的类区分输入和封装声明。
类有不同的访问级别并且有很多不同的类;抽象的类,最终的类等等。
除了以上提到的类的类型之外,Java也有像内部类和匿名类这样的特殊类。
八、Java程序包
简而言之,就是一种对类和接口进行分类的一种方法。当用Java开发程序时,数百个类和接口会被编写,因此对这些类进行分类是必须的,而且也会使问题变得容易。
九、Import语法
在Java中,如果给出包括封装和类的名称的全限定名,那么编译器很容易定位到源类和源代码。Import语法是给编译器寻找特定类的适当位置的一种方法。
举例来说,下面这行语句将会要求编译器去装载java_installation/java/io
路径下的所有可用的类:
import java.io.*;
十、一个简单的案例
下面将创建两个类:Employee和EmployeeTest。
这个Employee类包括四个实体变量姓名(name),年龄(age),职位(designation)和薪水(salary)。这个类有一个确定的且需要参数的构造器。
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);
}
}
为了运行这个Employee类应当建立主函数和类实例化。下面分别为这些任务创建类。
下面所给的是EmployeeTest类,这个类创建了两个Employee类的实例,并且为每个对象调用方法从而给每个变量赋值。
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,会看到如下结果:
javac Employee.java
vi EmployeeTest.java
javac EmployeeTest.java
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://github.com/easonjim/5_java_example/tree/master/javabasicstest/test2
Java的对象和类的更多相关文章
- Java常见对象Object类中的个别方法
Java常见对象Object类 public int hashCode() : 返回该对象的哈希码值. 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值.你可以理解成 ...
- 快乐编程大本营【java语言训练班】 6课:用java的对象和类编程
快乐编程大本营[java语言训练班] 6课:用java的对象和类编程 第1节. 什么是对象和类 第2节. 对象的属性和方法 第3节. 类的继承 第4节. 使用举例:创建类,定义方法,定义属性 第5节. ...
- Java的对象与类,继承
Java的对象与类,继承 题目1.Java类的建立与使用 设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名.当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的 ...
- 你真的了解JAVA中对象和类、this、super和static关键字吗
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 Java对象究竟是什么? 创建对象的过程 ...
- Java基础-对象与类
面向对象程序设计概述 面向对象的程序设计(简称OOP)时当今主流的程序设计范型,已经取代了"结构化"过程化程序设计开发技术,Java是完全面向对象的. 类 类设计构造对象的模板或蓝 ...
- Java核心技术 对象与类
对象与对象变量: 要想使用对象,就必须首先构造对象,并指定其初始状态,然后,对对象应用方法. 在Java中,使用构造器构造新实例.构造器是一种特殊的方法,用来构造并初始化对象. 在实际开发中,通常需要 ...
- Java 2-Java 对象和类
Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 消息解析 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例,有状态和行为. ...
- Java 的对象和类
Java 是一种面向对象的语言.作为一个面向的语言,Java 具有面向对象的特性,Java 能够支持下面的一些基本概念 − 多态(Polymorphism) 继承(Inheritance) 封装(En ...
- mongodb中Gson和java##Bean对象转化类
此类使用感觉比较繁琐, 每个字段加注解才可以使用, 不如mongoTemplate使用方便, 但如果使用mongo客户端的话, 还是比手动拼接快一点, 所以贴在这儿 package com.iwher ...
- java入门---对象和类&概念详解&实例
Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...
随机推荐
- QT+信号有参数与无参数的实现+QT4和QT5在信号和槽使用上的区别
在QT5中,信号有参数和无参数 #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushB ...
- git 设置ss代理
git config --global https.proxy http://127.0.0.1:1080 git config --global https.proxy https:// ...
- Moebius for SQLServer负载均衡
搞数据库的都知道:在Oracle上有RAC集群,MySQL也有对应的方案,而SQL Server上直到SQL Server 2012版本的AlwaysOn到来,微软都没有提供一个负载均衡方案,在网上看 ...
- excel数据比对,查找差异
1.选中需比对的数据 2.开始->条件格式->突出显示单元格规则->重复值 3.选择唯一值,点击确定 4.结果展示 5.颜色标识的即:不同值
- spring mvc poi excel
Util类 package com.common.util; public class ExportUtil { private XSSFWorkbook wb = null; private XSS ...
- p1036 选数(不详细勿看,递归)
题目:传送门 这题,不会做,而且看了好久才看懂题解的,然后在题解的基础上补了一个 if(start>end) return 0 感觉这样对于我更直观 转载自:大神博客的传送门,点击进入 先声明, ...
- linux shell 自动判断操作系统release 然后连接FTP yum源的脚本
如何搭建本地yum源见附录① 如何搭建FTP yum源见附录② 脚本正文: #!/bin/sh# CenterOS config yumOSV=`rpm -q --qf %{version} cent ...
- KVM中的网络简介(qemu-kvm)
emu-kvm主要向客户机提供了如下4种不同模式的网络: 1)基于网桥(bridge)的虚拟网卡 2)基于NAT(Network Addresss Translation)的虚拟网络 3)QEMU内置 ...
- Ubuntu中python链接本地数据库
由于python链接数据库需要下载DB API模块:例如你需要访问Mysql数据,你需要MySQL数据库模块. DB-API是一个规范. 以便为不同的底层数据库系统和数据库接口程序提供一致的访问接口. ...
- HTML5增加与改良的input元素
h5中form表单中input新增的属性值 在HTML5中增加了许多新的标签和功能属性,今天我们来看一个Form表单在HTML5中新的使用方法.那么在HTML5中新加入的这个功能与之前咱们使用的功能区 ...