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作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...
随机推荐
- H3C S5024P交换机 H3C AR28-31路由器命令
H3C S5024P交换机 H3C AR28-31路由器命令 交换机命令 各个视图的切换: 注意命令要在相应的视图下执行 在用户视图下键入quit命令可以断开与交换机的连接.在其它视图中键入quit命 ...
- Vue 几种常见开局方式
vue的开局方式五花八门,这里列几种常见的. 我们先建立一个app.vue来当入口文件,即所有页面都会以这个组件为模板. <template> <div id="app&q ...
- js数字转金额,ajax调用接口,后台返回html(完整页面),打开新窗口并写入html
一.转换成金额形式 function toMoney(num){ if(num){ if(isNaN(num)) { alert("金额中含有不能识别的字符"); return; ...
- JavaScript—获取当下往后七天的时间
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 从零实现一个http服务器
我始终觉得,天生的出身很重要,但后天的努力更加重要,所以如今的很多“科班”往往不如后天努力的“非科班”.所以,我们需要重新给“专业”和“专家”下一个定义:所谓专业,就是别人搞你不搞,这就是你的“专业” ...
- 万能的搜索--之DFS(二)
(一)深度优先搜索(DFS) 我们先给出深度优先的解决办法,所谓深度优先搜索,在迷宫问题里就是不撞南墙不回头,能走得深一点就尽量深一点.如果碰到了墙壁就返回前一个位置尝试其他的方向.在<啊哈!算 ...
- 导出csv文件(php实现)
<?php namespace App\Library\lib; class CsvLib { /** * [构造函数] * */ public function __construct() { ...
- 第三章:systemverilog文本值和数据类型
1.增强的文本值 2.改进的`define文本替换 3.时间值 4.新的变量类型 5.有符号和无符号类型 6.静态和动态变量(***) 7.类型转换 8.常数 增强的文本值(文本赋值增强) 主要是:位 ...
- MVC常见框架
Struts Struts是Apache软件基金下Jakarta项目的一部分.Struts框架的主要架构设计和开发者是Craig R.McClanahan.Struts 是Java Web MVC框架 ...
- K8S部署
k8S部署 柯穴上网 安装openvpn来获取docker镜像(不是本文重点不做详述) 软件包安装 1 关闭iptables,禁用firewalld,关闭selinux 2 配置yum仓库(使用阿里云 ...