java类结构
㈠ 使用java面向对象的思想设计一个即时战略游戏的类结构 主要类如下: (1)人口类(Person)
package ;
public class Person {
//生命值
private int lifeValue;
//攻击力
private int attackPower;
//消耗资源数
private int needResource;
public int attack(String select){
return this.lifeValue;
}
public int getLifeValue() {
return lifeValue;
}
public void setLifeValue(int lifeValue) {
this.lifeValue = lifeValue;
}
public int getAttackPower() {
return attackPower;
}
public void setAttackPower(int attackPower) {
this.attackPower = attackPower;
}
public int getNeedResource() {
return needResource;
}
public void setNeedResource(int needResource) {
this.needResource = needResource;
}
}
package ;
public class Nurse extends Person {
public void cure(){
System.out.println("begin cure!");
}
}
package ;
public class Sapper extends Person {
private int collectRes = 0;
//创造建筑createConstruction(),采集资源collectResource()
public void createConstruction(){
System.out.println("begin to createConstruction...");
}
public int collectResource(){
return collectRes;
}
}
package ;
public class Player {
//玩家名称。玩家资源值,玩家所拥有的人口对象,玩家所拥有的建筑对象。
private String player_name;
private int player_res;
private Person player_per;
private Construction player_con;
public String getPlayer_name() {
return player_name;
}
public void setPlayer_name(String player_name) {
this.player_name = player_name;
}
public int getPlayer_res() {
return player_res;
}
public void setPlayer_res(int player_res) {
this.player_res = player_res;
}
public Person getPlayer_per() {
return player_per;
}
public void setPlayer_per(Person player_per) {
this.player_per = player_per;
}
public Construction getPlayer_con() {
return player_con;
}
public void setPlayer_con(Construction player_con) {
this.player_con = player_con;
}
}
package ;
public class Person {
//生命值
private int lifeValue;
//攻击力
private int attackPower;
//消耗资源数
private int needResource;
public int attack(String select){
return this.lifeValue;
}
public int getLifeValue() {
return lifeValue;
}
public void setLifeValue(int lifeValue) {
this.lifeValue = lifeValue;
}
public int getAttackPower() {
return attackPower;
}
public void setAttackPower(int attackPower) {
this.attackPower = attackPower;
}
public int getNeedResource() {
return needResource;
}
public void setNeedResource(int needResource) {
this.needResource = needResource;
}
}
package ;
import java.util.Scanner;
public class PlayTest {
public static void main(String[] args) {
Player p1 = new Player();
Player p2 = new Player();
//设置第一个玩家的游戏信息
p1.setPlayer_name("player1");
//攻击力
p1.getPlayer_per().attack("a1");
p1.getPlayer_per().setLifeValue(30);
p1.getPlayer_per().setNeedResource(0);
p1.getPlayer_con().setNeedResource(0);
p1.setPlayer_res(0);
//设置第二个玩家的游戏信息
p2.setPlayer_name("player2");
//攻击力
p2.getPlayer_per().attack("a2");
p2.getPlayer_per().setLifeValue(30);
p2.getPlayer_per().setNeedResource(0);
p2.getPlayer_con().setNeedResource(0);
p2.setPlayer_res(0);
//开始准备资源
p1.getPlayer_per();
p1.getPlayer_con();
p2.getPlayer_per();
p2.getPlayer_con();
//游戏规则
String key1 = "a1";
String key2 = "Sc1";
String key3 = "Sr1";
String key4 = "Nc1";
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
if(key1.equals(input)){
p1.getPlayer_per().setLifeValue(p1.getPlayer_per().getLifeValue()+1);
p1.getPlayer_per().setNeedResource(p1.getPlayer_per().getNeedResource()+1);
p2.getPlayer_per().setLifeValue(p2.getPlayer_per().getLifeValue()-1);
}else if(key2.equals(input)){
p1.getPlayer_con().setCurrentSum(+1);
p1.setPlayer_con(p1.getPlayer_con());
}else if(key3.equals(input)){
p1.setPlayer_res(p1.getPlayer_res()+1);
}else if(key4.equals(input)){
p1.getPlayer_per().setLifeValue(+1);
p1.setPlayer_per(p1.getPlayer_per());
}
System.out.println("当前玩家1的进攻以及资源");
System.out.println("当前玩家2的进攻以及资源");
}
}
㈡ java开发项目,目录结构大家一般怎么划分
要看采用什么模式,如果是MVC模式的,就按照模型,视图,控制器来划分包名,可以有个工具类的包。学习java推荐选择千锋教育。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,
Java培训出来如何找高薪工作:
1.获得程序员式思维方式的快速建立知识体系。
2.找到一个合适的方法来实现技术进入,比如注册一个声誉良好的培训机构。
3.阅读一本书仍然是系统地学习知识的最佳方式,尽管在技术博客或社区论坛上有很多大神。
4.初学者应该积极地提问,依靠别人的经验并不可耻,关键是要用最少的时间来获得最多的收入。
5.根据大多数受访者的经验,阅读源代码是最快的增长途径。
6.HTML5.Python.Java.C.Golang等都是强大而普遍的入门语言,在精通之后再学其他。
想要了解更多关于java的相关信息,推荐咨询千锋教育。千锋教育成立于2011年1月,立足于职业教育培训领域,公司现有教育培训、高校服务、企业服务三大业务板块。教育培训业务分为大学生技能培训和职后技能培训;高校服务业务主要提供校企合作全解决方案与定制服务;企业服务业务主要为企业提供专业化综合服务。公司总部位于北京,目前已在20个城市成立分公司,现有教研讲师团队300余人。
㈢ 关于JAVA的问题:什么是类写出java中类定义的格式
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
定义一个类的格式如下图:
(3)java类结构扩展阅读:
对象可以访问类的成员,但并不是所有成员都可以被访问,能否访问取决于声明该成员时所用的关键字(public/protected/private)。具体规则如下:
1、类的公有成员可以被该类,其派生类和类实例化的对象访问。
2、类的保护成员可以被该类及其派生类访问,不可以被该类的对象访问。
3、类的私有成员可以被该类访问,不可以被派生类及其该类的对象访问。
㈣ JAVA数据结构有哪几种
JAVA数据结构有以下几种:
1、List:
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。
2、Vector:
基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。
另外很重要的一点就是Vector是线程同步的(sychronized)的,这也是Vector和ArrayList 的一个的重要区别。
3、ArrayList:
同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。
4、LinkedList:
LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。 它每一个节点(Node)都包含两方面的内容:节点本身的数据(data),下一个节点的信息(nextNode)。
所以当对LinkedList做添加,删除动作的时候就不用像基于数组的ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了,这是LinkedList的优势。
5、HashSet:
虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。
但是Set则是在 HashMap的基础上来实现的,这就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。
6、HashMap:
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
7、HashTable:
Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为nul
㈤ java中都有哪些数据结构
数据结构:
①数组 (Array)
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数
据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组
元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指
针数组、结构数组等各种类别。
②栈 (Stack)
栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后
的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
③队列 (Queue)
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行
插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
④链表 (Linked List)
一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
⑤树 (Tree)
树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
⑥堆 (Heap)
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指
二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
⑦图 (Graph)
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,
边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
⑧散列表 (Hash)
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称
这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
差不多我就知道这些了~
㈥ java什么是结构型模式
结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。
在GoF设计模式中,结构型模式有:
1.适配器模式 Adapter
2.桥接模式 Bridge
3.组合模式 Composite
4.装饰模式 Decorator
5.外观模式 Facade
6.享元模式 Flyweight
7.代理模式 Proxy
㈦ java集合类框架中类的组织结构,并说明它们之间的联系与区别。
结构图一楼给出来了,
联系:list是可重复的有顺序的;set是不重复的无序的;map中的key是不重复的,value是和key一一对应的。
区别:
1. ArrayList是用动态数组实现的,有数组随机访问的优点,但插入和删除操作过多时效率低;LinkedList是用双向链表实现的,插入和删除操作效率高,但随机访问数据不如ArrayList速度快。
2. HashSet是用散列实现的,TreeSet是用红黑树(基于二叉平衡树的变种)实现的,
TreeSet是有序的(这可能与数学中纯粹的集合概念不一致,但似乎这世上本就没有纯粹的东西吧),所以放入TreeSet中的对象必须是可比较的,即实现Compareble接口。
3. HashMap和TreeMap,与HashSet、TreeSet类似。
㈧ 介绍下Java程序的结构
Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类,类体中又可包括属性与方法两部分。而每一个应用程序都必须包含一个main()方法,含有main()方法的类称之为主类。
一: Java程序的主类及其格式
作为一个可以独立运行的Java程序,在它的众多类中必须要有一个类作为程序的起始类,为了方便,本书把这个类称为主类。当需要执行一个程序时,人们在java命令后面输入的便是这个主类的文件名(也是主类名),因此主类文件是Java运行环境建立起来之后第一个被装入虚拟机的用户文件。为了使虚拟机可以找到程序运行的起始入口,主类必须为public类,并含有一个在格式上符合约定的入口方法main(),其格式如下:
public static void main(String[] args){
…
}
其中各参数含义如下。
main:入口方法名称。
args:命令行参数,这是一个String对象数组。
static:修饰字,说明main()是一个静态方法(类方法)。
public:修饰字,说明main()具有公有访问属性。
于是,主类框架的源代码如下:
public class 主类名{
…
public static void main(String[] args){
…
}
}
Java程序的主类常常使熟悉C/C++的读者感到迷惑:main()方法不就相当于C/C++程序中的主函数吗,为什么非得把它放到一个类里,难道它有什么不同吗?
没错,Java类中main()方法就相当于C/C++程序中的主函数,是一个入口函数。之所以把它封装到一个类里,而不像C/C++那样单独作为一个函数来处理,就本书作者的理解,大概Java的设计者们有如下几个方面的考虑。
1)Java既然把所有事物都看成了对象,那么就没有理由不把程序也看成对象,因为程序也是一种事物。既然是对象,那么它就应该属于某个类并以程序名来命名。既然程序是一种类,那么main()就应该是这个类的一个方法,只不过它有些特殊,它是一个入口方法,并且对它有些特殊规定,例如其名称必须为main(),必须是公有静态方法,有命令行参数等。
2)如果把程序封装成了类,那么包括本程序在内的任何程序就都可以根据需要,随时创建这个类的对象,并通过该对象使用这个类中的资源,这样就便于资源共享,从而提高程序的灵活性。
3)Java程序是一种以类为基本单位的模块化程序,程序被编译后,每一个类会对应生成一个二进制字节码类文件。如果把程序也封装成类,那么它的文件就与其他类文件统一起来,而不会产生其他类型的文件,因而便于管理。
4)之所以把入口方法封装到类中,其根本目的就是要尽可能平等地看待所有的类。因为Java的最终目的是要以类为基本模块来实现可装配软件,如果把main()方法封装到了一个类中,那么就意味着main()与类的其他方法没什么本质区别,只不过是分工不同而已。下面很快就会看到,Java的所有类都可以含有一个入口方法而成为主类。也就是说,在Java程序中根本就没有主类、次类之分,这里之所以把带有main()方法的类称为主类,是为了表达方便。
二: JAVA源程序在命令行下的运行
classBank{
publicvoidinit(){
System.out.println("Yes,Ican");
}
publicstaticvoidmain(Stringargs[]){
BankAccountba1=newBankAccount(100.00);
System.out.print("Beforetransactions,");
ba1.display();
ba1.deposit(74.35);
ba1.withdraw(20.00);
System.out.print("Aftertransactions,");
ba1.display();
Bankb=newBank();
b.init();
}
}
classBankAccount{
privatedoublebalance;
publicBankAccount(doubleopeningBalance){
balance=openingBalance;
}
publicvoiddeposit(doubleamount){
balance+=amount;
}
publicvoidwithdraw(doubleamount){
balance-=amount;
}
publicvoiddisplay(){
System.out.println("balance="+balance);
}
}
三:完整的java源程序应该包括下列部分
package语句;
import语句;
public classDefinition; // 公共的类定义部分,至多只有一个公共类的定义
// java语言规定该java源程序的文件名必须与该公共类名完全一致
classDefinition; // 类定义部分,可以有0个或多个
interfaceDefinition; // 接口定义部分,可以有0个或多个
package:java编译器为每个类生成一个字节码文件,且文件名与类名相同,这就会带来一个问题:同名的类会发生冲突。package便可管理类命名空间。
一般地,具有相同功能的类放在一个package中。
一个java源程序至多只能有一个公共类的定义。
若java源程序有一个公共类的定义,则该源文件名字必须与该公共类的名字完全相同。
若源程序中不包含公共类的定义,则该文件名可以任意取名。
若一个源程序中有多个类定义,则在编译时将为每个类生成一个。class文件。
三。java编程规范
包名:全小写的名词,中间可由点分割,eg:java.awt.event
类名:首字母大写,多个单词合成,每个单词首字母也要大写,eg: class HelloWorldApp
接口名: 同类名,eg: interface Collection
方法名: 由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,eg: balanceAccount, isButtonPressed
变量名: 全小写,一般为名词,eg: length
常量名: 基本数据类型的常量名为全大写,如果由多个单词构成,可以用下划线隔开,eg: int YEAR, int WEEK_OF_MONTH
对象类型的常量,则是小写混合,由大写字母把单词隔开
㈨ 请问,什么是java的类库结构
ava类库中有很多包:
以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;
以 javax.* 开头的是扩展包,x 是extension 的意思,也就是扩展。虽然 javax.* 是对 java.* 的优化和扩展,但是由于 javax.* 使用的越来越多,很多程序都依赖于 javax.*,所以 javax.* 也是核心的一部分了,也随JDK一起发布。
以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。
- 在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如网络发布的包会以 com..* 开头,w3c组织发布的包会以 org.w3c.* 开头,微学苑发布的包会以 net.weixueyuan.* 开头……
㈩ 什么是java 中的类,和c中的结构体有什么区别
C的结构只拥有数据,程序代码是以函数形式存在的,来操作数据。
Java的类,是将代码与数据集成在一起,特定代码专操作特定数据,能减少很多错误,并且将模块设计与系统集成分离,有利于开发大型应用和团队协作。