定义对象的类:

  • 一个对象的状态(属性或特征)是指那些具有他们当前值的数据域
  • 一个对象的行为是由方法定义的,调用对象的方法就是完成对象的一个动作

使用一个通用类来定义同一类型的对象。类是一个模板,一个对象是类的一个实例,可以从一个类创建多个实例

实例如下:

public class Main
{
public static void main(String args[])
{
Circle c1 = new Circle();
System.out.println("The area of the circle of radius " + c1.radius + " is " + c1.getArea()); Circle c2 = new Circle(25);
System.out.println("The area of the circle of radius " + c2.radius + " is " + c2.getArea());
c2.radius = 100;
System.out.println("The area of the circle of radius " + c2.radius + " is " + c2.getArea()); }
}
class Circle{
double radius;
Circle() {
radius = 1.0;
}
Circle(double newRadius) {
radius = newRadius;
}
double getArea() {
return radius * radius * Math.PI;
}
}

可以把两个类放在同一个文件中,但是文件中只能有一个类是公共的,除此之外,公共类必须与文件同名,如上所示。

构造函数三特性:

1、必须具备和所在类同名

2、没有返回值,连void都没有

3、构造函数在创建一个对象使用new操作符时调用,构造函数的作用是初始化对象

在创建一个对象之后,它的数据和方法可以使用圆点运算符(.)来访问和调用,即对象成员访问运算符

数据域称为实例变量,方法称为实例方法

数据域也可能是引用型的,如下面的Student类包含一个String类型的name数据域:

class Student{
String name;
int age;
boolean isScienceMajor;
char gender;
}

引用类型数据域的默认值是null,数值类型数据域的默认值是0,boolean类型数据域的默认值是false,char类型数据域的默认值是‘\u0000’

对上面的Student对象中数据域的默认值进行测试:

public class Main
{
public static void main(String args[])
{
Student student = new Student();
System.out.println("name? " + student.name); //name? null
System.out.println("age? " + student.age); //age? 0
System.out.println("isScienceMajor? " + student.isScienceMajor); //isScienceMajor? false
System.out.println("gender? " + student.gender); //gender? }
}

使用java库中的类

Date类:

public class Main
{
public static void main(String args[])
{
java.util.Date date = new java.util.Date();
System.out.println("The elapsed time since Jan 1, 1970 is " + date.getTime() + " milliseconds");
//The elapsed time since Jan 1, 1970 is 1404740843243 milliseconds
System.out.println(date.toString());
//Mon Jul 07 21:47:23 GMT+08:00 2014
}
}

Random类

可以使用Math.random()获取一个(0.0,1.0)之间的随机double型值,另一种产生随机数的方法是使用java.util.Random类,它产生一个int、long、double、float和boolean型值

创建一个Random对象时,必须指定一个种子或者使用默认的种子,无参构造方法使用当前已经逝去的时间作为种子

public class Main
{
public static void main(String args[])
{
Random random = new Random();
int Irand = random.nextInt();
int Isrand = random.nextInt(100);
long lrand = random.nextLong();
double drand = random.nextDouble();
float frand = random.nextFloat();
boolean brand = random.nextBoolean();
System.out.println("random.nextint(): " + Irand);
System.out.println("random.nextInt(100) " + Isrand);
System.out.println("random.nextLong() " + lrand);
System.out.println("random.nextDouble() " + drand );
System.out.println("random.nextFloat() " + frand);
System.out.println("random.nextBoolean() " + brand);
}
}
/*
random.nextint(): -678227104
random.nextInt(100) 9
random.nextLong() 2478178459367264996
random.nextDouble() 0.5726788505253162
random.nextFloat() 0.5969435
random.nextBoolean() false
*/

静态变量、常量和方法

如果想让一个类的所有实例共享数据,就使用静态变量(或类变量)。静态变量将变量值存储在一个公共的内存地址,故所有的对象都可以修改这个变量

无需创建类实例就可以调用静态方法

public class Main
{
public static void main(String args[])
{
System.out.println("Before creating objects");
System.out.println("The number of Circle objects is " + Circle2.numberOfObjects); //The number of Circle objects is 0
Circle2 c1 = new Circle2(); System.out.println("\nAfter creating c1");
System.out.println("c1: radius (" + c1.radius + //c1: radius (1.0) and number of Circle objects (1)
") and number of Circle objects (" +
c1.numberOfObjects + ")");
Circle2 c2 = new Circle2(5); c1.radius = 9;
System.out.println("\nAfter creating c2 and modifying c1");
System.out.println("c1: radius (" + c1.radius + //c1: radius (9.0) and number of Circle objects (2)
") and number of Circle objects (" +
c1.numberOfObjects + ")");
System.out.println("c2: radius (" + c2.radius + //c2: radius (5.0) and number of Circle objects (2)
") and number of Circle objects (" +
c2.numberOfObjects + ")");
}
} class Circle2 {
double radius;
static int numberOfObjects = 0; public Circle2() {
radius = 1.0;
numberOfObjects++;
} Circle2(double newRadius) {
radius = newRadius;
numberOfObjects++;
} static int getNumberOfObject() {
return numberOfObjects;
} double getArea() {
return radius * radius * Math.PI;
}
}

静态变量和静态方法既可以在类的实例方法中使用,也可以在类的静态方法中使用,但是,实例变量和实例方法只能在实例方法中使用,不能在静态方法中使用

public class Main
{
int i = 5;
static int k = 2;
public static void main(String args[])
{
Main mm = new Main();
int j = mm.i;
mm.m1();
}
public void m1() {
i = i + k + m2(i, k); } public static int m2(int i, int j) {
return (int)(Math.pow(i, j));
}
}

包可以用来组织类,在程序中首先应该出现语句: package packagename;

如果定义类的时候没有声明包,则在默认包中

private修饰符限定方法和数据域只能在它自己的类中被访问,默认修饰符将访问权限限定在包内,而公共的修饰符没有限定权限

如果一个类没有被定义为公共的,那么它只能在同一个包内被访问

package p1;

public class c1 {
public int x;
int y;
private int z;
public void m1() { }
void m2() { }
private void m3() { }
}
package p1;

public class c2 {
void aMethod() {
c1 o = new c1();
o.x = 1;
o.y = 2;
o.z = 2; //error
o.m1();
o.m2();
o.m3(); //error }
}
package p2;

import com.sun.org.apache.xml.internal.security.c14n.helper.C14nHelper;

public class c3 {
void aMethod() {
C1 o = new c1();
o.x;
o.y; //error
o.z; //error
o.m1();
o.m2(); //error
o.m3(); //error }
}

修饰符private只能应用在类的成员上,在定义私有数据域的类外的对象是不能访问这个数据域的,为了能访问私有数据域,可以提供一个get方法返回数据域的值

为了能够更新一个数据域,可以提供一个set方法给数据域设置新值

public class Circle {
private double radius = 1;
private static int numberOfObjects = 0;
public Circle() {
numberOfObjects++;
}
public Circle(double newRadius) {
radius = newRadius;
numberOfObjects++;
}
public double getRadius() {
return radius;
}
public void setRadius(double newRadius) {
radius = (newRadius >= 0) ? newRadius : 0;
}
public static int getNumberOfObjects() {
return numberOfObjects;
}
public double getArea() {
return radius * radius * Math.PI;
}
}

Circle类

public class Main
{
public static void main(String args[])
{
Circle myCircle = new Circle(5.0); //creat a Circle
System.out.println("The area of the circle of radius "
+ myCircle.getRadius() + " is " + myCircle.getArea()); //Increase myCircle's radius
myCircle.setRadius(myCircle.getRadius() * 1.1);
System.out.println("The area of the circle of radius " + myCircle.getRadius() + " is "
+ myCircle.getArea()); System.out.println("The number of objrcts created is " + Circle.getNumberOfObjects());
}
}

将对象传递给方法,实际上是传递对象的引用

java只有一种参数传递的方式:值传递。传递对象实际上是传递对象的引用值

public class Main
{
public static void main(String args[])
{
Circle myCircle = new Circle(1);
int n = 5;
printAreas(myCircle, n);
System.out.println("\n" + "Radius is " + myCircle.getRadius());
System.out.println("n is " + n);
} public static void printAreas(Circle c, int times) {
System.out.println("Radius \t\tArea");
while(times >= 0) {
System.out.println(c.getRadius() + "\t\t" + c.getArea());
c.setRadius(c.getRadius() + 1);
times--;
}
}
}

 

对象数组:对象数组实际上是引用变量的数组

public static void main(String args[])
{
Circle[] circleArray = new Circle[10];
for(int i = 0; i < circleArray.length; ++i) {
circleArray[i] = new Circle();
}
}

 

java对象和类学习的更多相关文章

  1. Java-Runoob:Java 对象和类

    ylbtech-Java-Runoob:Java 对象和类 1.返回顶部 1. Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 ...

  2. (五)Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 消息解析 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例,有状态和行为. ...

  3. Java 教程 (Java 对象和类)

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  4. JavaSE基础(十二)--Java 对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  5. 重新学习Java——对象和类(一)

    之前通过记笔记的方法,对于<Java核心技术>这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方 ...

  6. 重新学习Java——对象和类(二)

    上一节回归了如何以面向对象的思想去使用一些Java中的公共类,也设计了一些自己的类并介绍了设计类的基本方法和技巧,这一节我们将继续回顾这些内容,并争取从中获得新的体验和感受. 1. 静态域与静态方法 ...

  7. java.util.Properties类 学习笔记

    学习目标:   1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...

  8. Java对象与类中的一个小练习

    一直在Eclipse里做练习.是做一个练习,执行一个的那种.刚刚学习了Java的对象与类,练习中把类和执行放在同一包下的两个.java文件里面了.是可以执行的.(Get) 相关代码: public c ...

  9. JAVA对象和类

    Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 Java中的类 类可以看成是创建Java对象的模板. 通过下面一个简单的类来理解下Java中类的定 ...

随机推荐

  1. [转载]C# 中Web.config文件的读取与写入

    asp.net2.0新添加了对web.config直接操作的功能.开发的时候有可能用到在web.config里设置配置文件,其实是可以通过程序来设置这些配置节的. asp.net2.0需要添加引用: ...

  2. 关于.net中的脚本语言使用

    基于.net中drl框架的脚本现在有很多,最近也由于工作的需要,目前有lua.python.ruby.javascript的.net实现,对ruby不怎么了解,python.lua.js就成了试验的对 ...

  3. Nagios的安装配置与应用之五监控远程Linux服务器

    本文出自 “曹坏水” 博客,请务必保留此出处http://cao2012.blog.51cto.com/366908/1132113 NRPE是Nagios的一个功能扩展,它可在远程Linux和UNI ...

  4. linux useradd添加用户

    useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. useradd -m -s /bin/bash -g 群组名 用户名 其中 -m:自动建立用户的登入目录. -s:指定用户 ...

  5. ue标签不见了,如何解决?

    小问题,但是很恶心...如下图: 解决方法: 右键点击[菜单栏]右边的空白处,选择advanced,默认是basic,这时菜单栏中的菜单条目会变多,然后选择[视图]---[视图/列表]---[打开文件 ...

  6. [topcoder]AvoidRoads

    二维动态规划.和某一道leetcode的题目差不多.就是多了blocks的数组或集合. 本次解题的心得有:1.根据题意使用集合表示阻碍:2.使用字符串的形式表示整数的pair,简洁明了:3.p1到p2 ...

  7. 算法Sedgewick第四版-第1章基础-001递归

    一. 方法可以调用自己(如果你对递归概念感到奇怪,请完成练习 1.1.16 到练习 1.1.22).例如,下面给出了 BinarySearch 的 rank() 方法的另一种实现.我们会经常使用递归, ...

  8. 理解extern char s[100]与extern char *s

    在x.c中定义了一个字符数组 char s[100],在l.c中进行引用extern char s[200], 有些c程序新手经常把它写成extern char *s. 这两种写法的含义一样吗? 首先 ...

  9. 24点C++程序实现 编程之美1.16

    解法1,对于任意输入的四个数字,给出一个24点的解法,若无解,则没有输出. 原理参照下图(编程之美原书) 代码如下,仅供参考 // 1.16.cpp : Defines the entry point ...

  10. NFC(7)向NFC硬件写入数据的两个示例(nfc硬件启动android应用,nfc硬件打开uri)

    向NFC标签写入数据基本步骤 1,获取Tag对象 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 2,判断NFC标签的数据类型(通 ...