1.知识要点

假设:

         public  ClassName{
    int data;
  String name;
    ClassName(){data=1;}
    public static int getdata(){return data;}}</span>

❶含main()的为主类。多个类放在一个文件中,只能有一个主类。

❷类可以不定任何构造方法(函数),系统默认提供无参构造函数。当且仅当无任何无参构造函数时才提供。

❸构造函数与类同名,无返回类型。

   ❹对象声明:ClassName objectRef=new ClassName(....)
    实质上,obejectRef为一个包含对ClassName对象的引用变量。即为引用类型,简称为ClassName对象。

❺类似于匿名数组,也有匿名对象,如new ClassName()就可以直接用于参数或者输出。因为此时对象不需要引用。

❻类的数据域也可以是引用类型。例如name同样为String引用类型,倘若其没有引用任何变量,初始化为null。

❼Java的类的数值域,数值类型默认0,引用类型默认null,boolean默认false,char默认‘\u0000’。但是局部变量没有初始化值,比如在main中不要试图定义变量,未经初始化输出。

❽不需要某个对象的时候。显式的赋给null,其之前的引用的对象进入垃圾回收机制。

❾类似数组,对象名之间的赋值,后者指向的对象进入垃圾回收机制,Java系统自动的收回所占空间。

2.静态变量、常量与方法

静态变量(类变量):类的所有实例共享数据,存储在公共地址,某对象修改,其他的对应修改。关键字static。可以使用类名(推荐)或者引用变量调用

常量:关键词final static。所有类的对象共享。推荐使用类名访问,增加可读性。

静态方法:静态方法在前面添加static关键字。比如常用的Math.random

注意:

    静态变量和静态实例可以在实例方法和静态方法中使用。相反,实例方法和实例变量仅能使用于实例方法。因为静态方法、变量不属于某个特定的类。
    所谓实例方法和实例变量是依赖具体实例的,比喻半径r依赖于某个圆实例,getArea()得到圆的面积,也是依赖实例。倘若不依赖,就可以定义为静态方法或者静态变量(比如 PI)
package Study_Class;
public class MyCircle {
double radius;//实例变量
static int j=2;
final static double Pi=3.14159; MyCircle(){radius=1.0;}
MyCircle(double r)
{
if(r>0) radius=r;
else radius=0;
} public static void main(String[] args)
{
//int k=j;//错误!!!,实例变量不在静态方法中使用
//getArea();//错误!!!,实例方法不能在今天方法中使用
MyCircle circle1=new MyCircle(2.0);
System.out.println("the area of circle is"+circle1.getArea());//实例方法使用实例来调用
} public double getArea()//实例方法
{
return Math.pow(radius, 2)*Pi;
} }
</pre><pre code_snippet_id="497932" snippet_file_name="blog_20141027_2_2668877" name="code" class="java">   

3.public和private修饰符以及数据域的封装

❶类、方法、数据域前面有public修饰符,表示可以被任何其他类(通过实例访问,某个public类的public数据域和方法)访问。

❷如果不带修饰符。代表可以被同一包类的任何一个类访问(包私有)。即,同一个包的类,可以通过该public类实例访问,public类的public类和方法,也通过实例访问,不带修饰符的数据域和方法。

❸不同的包,只能通过实例访问,public类的public数据域和方法。

❹仅仅只有类内定义的对象,能够访问该类的私有方法和私有数据。包内,其他类都不可以。如果为了限制用户创造实例,可将构造方法限定为私有。

❺对于私有数据,可以用public接口方法(函数)修改。为了避免数据被篡改,推荐数据域声明为私有。

简而言之:

pravite限制访问权限在类内,默认修饰符限制访问权限在包内,public没有限定权限。

package Study_Class;
public class MyCircle {
private double radius;//实例变量
static int numberofObject=0;
final static double Pi=3.14159; MyCircle(){radius=1.0;numberofObject++;}
MyCircle(double r)
{
if(r>0)
radius=r;
else
radius=0;
numberofObject++;
} public void setRidus(double r)
{
if(r>0)
radius=r;
else
radius=0;
} public void getArea()//实例方法
{System.out.println("The area is --- "+Math.pow(radius, 2)*Pi);}
void gerRadius()
{System.out.println("The radius is--- "+radius);}
}

在同一个包内使用上面定义的类如下:

package Study_Class;
public class testCircle//同一个包类调用MyCircle类
{
public static void main(String[] args)
{
MyCircle circle1=new MyCircle(2.0);
circle1.gerRadius();//无修饰符的方法
circle1.getArea();//实例方法使用实例来调用 circle1.setRidus(3.5);
circle1.gerRadius();
circle1.getArea();//实例方法使用实例来调用 MyCircle circle2;//只是定义了引用变量
System.out.println("The number is--- "+MyCircle.numberofObject);//1个实例
circle2=new MyCircle();
System.out.println("The number is--- "+MyCircle.numberofObject);//2个实例
}
}
注意:
      ①同一个包类,可以由实例调用public和无修饰符的方法和变量
      ②可以由类名调用静态变量
      ③定义引用类型,实际没有创造实例。

4.对象参数和对象数组

package Study_Class;
public class testCircle//同一个包
{
public static void main(String[] args)
{
MyCircle[] circle=new MyCircle[5];//每个均是默认null的引用变量
for(int i=0;i<circle.length;i++)
circle[i]=new MyCircle(i);
print(circle);//静态方法中使用静态方法
System.out.println("The number of Object is--- "+MyCircle.numberofObject);//2个
}
private static void print(MyCircle[] circle)
{
for(MyCircle u:circle)
{u.gerRadius();u.getArea();} }
}

使用对象数组和给方法传递对象参数如上图。

注意:

   ①对象参数的实质仍旧为引用传递,而不是值传递。
   ②静态方法中不能使用非静态的数据和方法。如上图的print应该定义为static.
   ③对象存储于堆中

Java探索之旅(6)——对象和类的更多相关文章

  1. Java探索之旅(7)——对象的思考

    1.知识要点 ❶不可变类:一旦创建,其内容不能改变的类称之为不可变类.满足:⑴所有数据域私有,⑵没有修改器,⑶没有访问器方法,其返回一个指向可变数据域的引用.(这样通过引用就能修改私有数据域).比如, ...

  2. [Java核心技术]第四章-对象与类(4.1-4.6总结)

    4.1面向对象程序设计概述 OOP(面向对象编程Object Oriented Programming) OOP中数据第一位,算法第二位. 类 封装:关键在于不能让其他方法直接访问类的实例域,程序仅通 ...

  3. Java探索之旅(8)——继承与多态

    1父类和子类: ❶父类又称基类和超类(super class)子类又称次类和扩展类.同一个package的子类可以直接(不通过对象)访问父类中的(public,缺省,protected)数据和方法. ...

  4. Java入门 - 语言基础 - 04.对象和类

    原文地址:http://www.work100.net/training/java-object-class.html 更多教程:光束云 - 免费课程 对象和类 序号 文内章节 视频 1 概述 2 J ...

  5. 四、java基础-面向过程_对象_类中可出现的因素

    1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...

  6. java基础学习总结六(对象与类、类的属性与方法)

    一:面向过程与面向对象的区别 举例:一个人开门的动作,可以分解为开门,人进去,关门. 面向过程:人作为执行者,1:开门  2:进入   3:关门 面向对象:人作为指挥者,将开门,关门的动作都封装到门上 ...

  7. Java探索之旅(15)——包装类和字符类

    1.包装类 ❶出于对性能的考虑,并不把基本数据类型作为对象使用,因为适用对象需要额外的系统花销.但是某些Java方法,需要对象作为参数,例如数组线性表ArrayList.add(Object).Jav ...

  8. Java探索之旅(4)——方法和Random&Math类

    1.基本知识点    ❶方法在C++里面称为函数.调用方法时,应该类型兼容--即不需显式类型转换即可将形参传递给实参.    ❷形参的改变不影响实参的值.    ❸Java注重模块化设计和自顶向下的设 ...

  9. Java探索之旅(13)——字符串类String

    1.初始化 String类是Java预定义类,非基本类型而是引用类型. public class StudyString { public static void main(String[] args ...

随机推荐

  1. template.helper 检测浏览器 时间转换

    template.helper('changeTime',function getLocalTime(nS) { var b=nS.substr(6,13); var c=parseInt(b) va ...

  2. R语言图形base系统(一)

           一般R作图有三大绘图系统:base系统.ggplot2绘图系统.lattice绘图系统.        本篇主要介绍base系统绘图时的图形参数.一般用plot()函数来完成.在R中,若 ...

  3. Onenet GPS上传经纬度的格式 笔记

    首先搞清楚几个问题: 1.GPS输出的经纬度 GPS获取的数据: 3438.1633,N,11224.4992,E 格式是ddmm.mmmmm 2.Onenet服务器识别的经纬度坐标格式 服务器识别需 ...

  4. sql把字符数组转换成表

    需求:把字符串1,2,3变成表里的行数据 方法:用自定义函数实现 /* 获取字符串数组的 Table */ from sysobjects where id = object_id('Get_StrA ...

  5. 在Delphi2007下安装ReportMachine6.5

    如何在Delphi2007下安装ReportMachine6.5: 一.在安装ReportMachine6.5之前要安装如下组件: (1).llPdfLib3.6,用于导出PDF文件: (2).Ehl ...

  6. 命令行 -- 命令"%cd%"

    1. @echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 echo 当前批处理全路径:%~f0 echo 当前盘符和路径的短文件名格式:%~sdp0 echo 当前 ...

  7. node 渲染html模板配置

    node 渲染html模板配置 安装swig模块 npm install swig--save - dev 加载swig模块 var swig = require('swig'); 模板配置 //第一 ...

  8. html5制作坦克大战

    全部html5都采用绘图技术完成.坦克是画出来的.(坦克,子弹,墙,水,草坪) 首先我们画出坦克. 坦克是两边两个矩形,中间一个大矩形,矩形了有一个圆,还有一根线. 画出坦克的思路是以坦克的左上角为参 ...

  9. java:Map借口及其子类HashMap二

    java:Map借口及其子类HashMap二 重点:所有的集合必须依赖Iterator输出 Map<String, Integer> map = new HashMap<String ...

  10. Codeforces Round #377 (Div. 2) F - Tourist Reform

    前言:关于如何求双连通分量,我们可以在tarjan搜索时标记下所有桥的位置(双连通分量(可以认为是没有桥的无向图图)即可通过删去所有桥得到),那么怎么找桥呢,对于每一条搜索到的边u->x,如果l ...