Java探索之旅(6)——对象和类

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.publicprivate修饰符以及数据域的封装

   ❶类、方法、数据域前面有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.
   ③对象存储于堆中

转载于:https://www.cnblogs.com/engineerLF/p/5393095.html

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

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

相关文章

BZOJ3924 : [Zjoi2015]幻想乡战略游戏

对于一个点&#xff0c;要求出它到所有点的带权距离和&#xff0c;只需记录下树分治的结构然后查询即可。 修改$O(\log n)$&#xff0c;查询$O(\log n)$。 到所有点带权距离和最小的点显然是这棵树的带权重心。 以1号点为根&#xff0c;考虑一条从父亲x到孩子y的边&#xff1a;…

Lucene5.5.4入门以及基于Lucene实现博客搜索功能

前言 一直以来个人博客的搜索功能很蹩脚&#xff0c;只是自己简单用数据库的like %keyword%来实现的&#xff0c;所以导致经常搜不到想要找的内容&#xff0c;而且高亮显示、摘要截取等也不好实现&#xff0c;所以决定采用Lucene改写博客的搜索功能。先来看一下最终效果&#x…

C和指针之反转字符串

1、问题 把参数字符串中字符反向排序&#xff0c;请使用指针而不是数组下标&#xff0c;不要使用任何C函数库中 2、实现 #include <stdio.h> #include <stdlib.h> /****函数把参数字符串中字符反向排序&#xff0c;请使用指针而不是数组下标&#xff0c;不要使用任…

都是基于.NET平台,WPF能取代Winform吗?

学Winform还是WPF&#xff1f;很多winform的学者时常在我的技术群咨询要不要学习WPF&#xff1f;我一贯的观点是必须学啊&#xff01;如果是搞工控做cs软件开发&#xff0c;WPF自然是首选。WPF优势在哪里&#xff1f;①前后端分离&#xff1a;WPF是数据驱动的而非Winform的事件…

王道408数据结构——第一章 绪论

文章目录一、概念数据结构研究内容二、数据三要素逻辑结构储存结构&#xff08;物理结构&#xff09;运算三、算法和算法评价时间复杂度空间复杂度四、数字相关汇总算法性能二叉树相关图相关矩阵相关一、概念 数据结构研究内容 数据结构是一门研究在非数值计算中&#xff0c;…

C和指针之Eratosthenes-埃拉托斯特尼筛方法找质数

1、问题 *Eratosthenes-埃拉托斯特尼筛方法找质数,给出要筛数值的范围n,先用2去筛,2的倍数不是质数, * 再用下一个素数,也就是3筛,把3留下,把3的倍数不是质数,接下去用下一个素数5筛,把5留下,把5的倍数不是质数, *c不断重复下去...... 2、代码实现 #include…

转:iOS-CoreLocation:无论你在哪里,我都要找到你!

1.定位 使用步骤&#xff1a; 创建CLLocationManager示例&#xff0c;并且需要强引用它 设置CLLocationManager的代理&#xff0c;监听并获取所更新的位置 启动位置更新 123_manager [[CLLocationManager alloc] init];_manager.delegate self;[_manager startUpdatingLocati…

正确对待生活

三文鱼&#xff0c;国人称为马哈鱼。是一类洄游性鱼类&#xff0c;为常被食用的鱼类之一。主要生活在大西洋及太平洋&#xff0c;在美洲大湖及其他湖可以找到。三文鱼在淡水环境下出生&#xff0c;之后移到海水生长&#xff0c;又会洄游到淡水繁殖。三文鱼会利用太阳和地球磁场…

WPF 实现验证码控件

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 01—代码如下一、创建CheckCode.xaml代码如下。<ResourceDictionary xmlns"http://schemas.microsoft.c…

curl   liinux下http命令执行工具

安装cURLwget http://curl.haxx.se/download/curl-7.17.1.tar.gztar -zxf curl-7.17.1.tar.gz./configure --prefix/usr/local/curlmake & make installCurl是Linux下一个很强大的http命令行工具&#xff0c;其功能十分强大。1) 二话不说&#xff0c;先从这里开始吧&#x…

王道408数据结构——第二章 线性表

文章目录一、线性表的定义和基本操作线性表顺序表1.插入操作2.删除操作3.按值查找&#xff08;顺序查找&#xff09;二、单链表1. 头插法2. 尾插法3. 按序号查找4. 按值查找5. 插入结点6. 删除结点7. 求表长三、 双链表1. 插入2. 删除四、循环链表五、静态链表六、顺序表和链表…

C和指针之用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数

1、问题 用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数 2、代码实现 #include <stdio.h> #define LEN 10000 /***Eratosthenes-埃拉托斯特尼筛方法找质数,给出要筛数值的范围n,先用2去筛,2的倍数不是质数,* 再用下一个素数,也就是3筛,把3留下,把3的倍数不是…

Mysql数据库性能优化

2019独角兽企业重金招聘Python工程师标准>>> Mysql数据库性能优化&#xff0c;可以从下面三点入手&#xff1a; 数据库设计 SQL语句优化 架构优化 一.数据库设计优化 1.适度的违反范式&#xff0c;适度 遵循三大范式就会带来查询时经常需要join&#xff0c;导致…

BZOJ 2588: Spoj 10628. Count on a tree 树上跑主席树

2588: Spoj 10628. Count on a tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id2588Description 给定一棵N个节点的树&#xff0c;每个点有一个权值&#xff0c;对于M个询问(u,v,k)&#xff0c;你需要回答u xor las…

session多服务器共享的方案梳理

因方便自己学习以此记录本文转自&#xff1a;http://www.cnblogs.com/wangtao_20/p/3395518.html#2846008session的存储了解以前是怎么做的&#xff0c;搞清楚了来龙去脉&#xff0c;才会明白进行共享背后的思想和出发点。我喜欢按照这样的方式来问(或者去搞清楚)&#xff1a;为…

4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2

1. 前言上一篇文章我们了解了bombardier&#xff0c;并知道了bombardier.yml与开源项目bombardier的关系&#xff0c;接下来的文章我们了解一下wrk、wrk2&#xff0c;并对比一下它们与bombardier的关系2. 认识wrkwrk是一种现代 HTTP 基准测试工具&#xff0c;能够在单个多核 CP…

王道408数据结构——第三章 栈和队列

一、栈 栈&#xff08;Stack&#xff09;是只允许在一端进行插入或删除操作的线性表。 栈顶&#xff1a;线性表允许插入删除的那一端 栈底&#xff1a;固定的、不允许进行插入删除的另一端 栈的操作特性可以概括为后进先出&#xff08;LIFO&#xff09; n个不同的元素进栈&…

C和指针之const、#define、volatile

1、const 定义const 只读变量,具有不可变形 const int a = 100; 编译器通常不为普通Const只读变量分配存储空间, 而是将它们保存在符号表中, 这使得它成为一个编译期间的值,没有了存储与读内存操作,使用效率很高 #define M3 //宏常量const int N = 5; //此时并没有将…

dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分

1. dispatchTouchEvent 是处理触摸事件分发,执行super.dispatchTouchEvent(ev)&#xff0c;事件向下分发。 2. onInterceptTouchEvent是ViewGroup提供的方法&#xff0c;默认返回false&#xff0c;返回true表示拦截。 3. onTouchEvent是View中提供的方法&#xff0c;ViewGroup也…

Avalonia跨平台入门第二十篇之语音播放问题

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放;今晚加个班来解决…