为什么java的不能更新数据(为什么Java不适合游戏开发)
本篇文章给大家谈谈为什么java的不能更新数据,以及为什么Java不适合游戏开发对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
我觉得java最大的优点是不是java很稳定,不会出现大的更新
稳定不稳定不是看是否有大的更新,java的如果要说,最大的优点就是用的人最多,这个下面具体说
为什么你感觉Java更新有很少的变化呢?
因为java的更新,有一个原则就是向下兼容,也就是你在jdk1.4上写的代码,跑在jdk1.7上一点问题没有。
java入门其实不难,你如果会.net,一两天就可以学会基本使用。编程的知识更多的是编程的一个思想,而不是具体的语言的实现,比如我们要做一个用户注册的功能,不管用什么语言编写,这个用户注册的流程和思路都是一样的,具体的是我们怎么来实现这些小的功能点,可能不同的语言在这些的实现上有一些语法和处理方式的不同,但思想一样的,你朋友02年学的java,他现在还在用,一方面是java语法变化不大,但更重要的是他对这些的编程的思想已经掌握了
为什么说java最大的优点是用的人多呢?
java有各种种样的类库,各种各样的框架,当然这些类库和框架学起来比较累,但同时他也是解决了各种各样的问题,比如你要写一个搜索引擎,你去学习使用lucene,你要写一个PDF的处理类,可以去使用pdfbox这样的类库,等等,这些类库大大的减少了我们的编码量,可以方便我们开发
java操作数据库时,插入语句出现问题
程序交流中心,这是专门为新手学习设立的论坛
二、SQL
Structur query language
结构化查询语言,是操作关系型数据库中的对象。
DDL(Data definition language数据定义语言),用于建表或删表操作,以及对表约束进行修改
create table, alter table, drop table对表结构的增删操作。
DML(Data manipulation language数据操作语言),向表中插入纪录,修改纪录
insert, update, delete, merge
transaction,事务控制语言,由DML语句组成的,commit;,rollback;
select查询语句
dcl授权语句 grant
三、Oracle
DBMS数据库管理系统
有Oracle提供,还提供AS,应用服务器
DBA数据库管理员
四、相关操作
1、sqlplus访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库操作的环境
sqlplus用户名/密码
2、show user显示当前用户的用户名
改变身份可以直接connect用户名/密码---这个是sqlplus命令
在sqlplus中可以使用!可以在shell和sqlplus间切换,!shell命令可以在sqlplus中使用shell命令。
实际上是sqlplus开了子进程来执行shell命令。
3、Oracle数据库中的表分两类:用户表(用户使用操作的表),系统表(数据库系统维护的表,也叫数据字典)
对用户表的DDL操作出发了对系统表的DML操作!
五、基本语法
1、select查询语句
select table_name from user_tables;(查询系统表)
以上的查询语句就是查询本用户下所拥有的所有表的表名。
投影操作,只查看选择的字段的信息。
选择操作,查看字段中的特定某些信息。
联接操作,多表查询,通过表间连接,查寻出多表中的信息
(1)select table_name from user_tables;(查询系统表)
以上的查询语句就是查询本用户下所拥有的所有表的表名。
(2)sqlplus的buffer中会缓存最后一条sql语句,可以使用"/"来执行这最后一条sql语句,也可以使用
edit命令来编辑最后一条sql语句。
l命令(list)(sqlplus命令)可以显示buffer中最后一条命令。
sqlplus命令可以缩写
(3)desc [表名]
这是一条sqlplus命令,注意他不是sql语句,这条命令用于查看表的结构。descript的缩写
[字段名] [字段的类型],这是使用完desc命令后显示的表结构。
(4)select [表的字段名1],[表的字段名2],... from表名;
select* from表名;查寻表中所有字段的信息
(5)关键字不等拆分,sql语句,以及表名,字段名是大小写不敏感的。
sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql语句,并提示。
在Oracle中字符显示是左对齐,数值右对齐。
(6)在select语句中可以使用数学表达式。
select [表达式(必须包含本表字段名)],[...],.... from表名;
运算的优先级的先乘除后加减,同级自左向右运算,括号改变优先级。
(7)别名
select [字段名或表达式] ["别名"],[...] ["..."],.... from表名;
可以通过在字段名或表达式后加空格"别名",可以给列,或者表达式结果其别名。
表达别名必须加双引号。
(8)字符串拼接使用||符号
select目标字段名||""||目标字段名 from表名;
注意:在Oracle中的字符串要用'..'包含
别名中需要使用空格,或是大小写敏感时需要用".."包含。
练习:
自己写一条SQL语句,执行的结果是select* from...;
其中...是每张系统表的表名
即在每张系统表的表名前加“select* from”,后加“;”
select'select* from'||table_name||';' from user_tables;
2、处理错误
(1)!oerr ora [错误号],系统可以显示错误的原因和如何修改。如果命令错误输入可以使用edit或ed来修改输入错误。
实际上是在编辑缓存文件中的最后一条sql语句。
也可以使用(change) c/错误字段/正确字段,来进行替换操作进行修改。
只有在Linux平台使用
!相当于 host,没有断连接,只是切换了一下,执行shell命令
(2)edit命令来编辑最后一条sql语句。
3、sqlplus设置
set pause on回车响应,分屏显示,只在本会话中有效
set pause off关闭分屏显示。
set pause"..."设置分屏显示的提示信息。
set pause on先输出提示信息,回车响应,分屏显示
set head off提头输出关闭
set feed off结尾输出关闭
set echo off回写关闭
spool文件名.sql写入指定文件
spool off关闭写入。
4、sql脚本
也就是在文件中写有sql语句的文件,可以在sqlplus中运行。
引入sql脚本
sqlplus用户名/密码@sql脚本(注意:在用户名密码输入结束后一定要加空格然后再写@sql脚本)
在脚本中最后一行写上“exit”,则运行完脚本以后,回到shell上
5、
Oracle中的空值空值会当无穷大处理,其实空值根本就不会存储,只是看作是无穷大。
Oracle中控制处理函数 NVL(字段名,值),这个字段中的空值替换为指定值,如果不为空,则会返回其原值。
例:select(salary*12)*(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;
distinct关键字,去掉重复行(这个关键字会触发排序操作)
例: select distinct dept_id,title from s_emp;
dept_id与title的联合不唯一
注意:distinct,关键字之后会对from之前的字段进行排重操作。
6、column命令--- sqlplus命令
column命令列格式的定义
column目标列名查看这个类是否定义了格式
column目标列名 format a..设置列宽。
column last_name heading'Employee|Name' FORMAT A15
设置题头
这其中的'|'是换行符
column salary justify left format$99,990.00
定义数字显示格式
注意:如果不满足显示的格式,就会把数据显示为"#"
column salary justify left format$00,000.00
会出现$00,928.00,用0补齐
column列名 clear(清除列格式定义)
注意:只有sqlplus命令才有简写,并且在使用sqlplus命令时结尾也不能加分号。
六、选择操作
1、order by
排序子句 ASC(默认,升序) DESC(降序)
order by目标列名(别名)排序顺序(不写排序顺序,会默认为升序排序)
例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;
注意:升序空值在结果的末尾,降序空值在结果的最前面。
2、where子句
where子句使用在 select... from...后面,用来选择所需(符合条件的)的记录
where后面跟的是表达式也就是 XXX=XXX, XXX between X and X,XXX in(X,X,X)
like'...'通配查询
between... and...,表示结果在这之间,between and是一个闭区间,
也就相当于...<=... and...>=...。
!=,<>,^=,这三个都标识不等于,<=,>=,=,这些运算符都可以使用。
... in(va1,val2,...)判断结果是否在这个枚举中存在
like'...'字符串通配查询,'%'表示多个字符,'_',表示一个字符。
注意:转义的用法:like‘S\_%’ escape‘\’
... and...表示只有两个条件同时满足
... or...表示条件只要满足其中只一就可以
all...是要求都满足条件。
not.....,则是可以与以上的条件产生反效果。
空值会对not in造成影响,也就是不等于任何值,但是空值例外。
... is null使用来判断值是否为空。
注意:Oracle中的字符串是严格区分大小写的。
(1)注意数据类型,数字类型直接写,字符用'......',缺省格式的Date可以用'......',只有别名
才用""包含。
(2)选择合适的运算符
七、单行函数
1.字符函数
字符是大小写敏感的
转小写 lower(字段名)---其中的参数可以是一个字符串常量或是一个字段名
转大写 upper(字段名)
首字母大写 initcap(字段名)
字符串拼接 concat(字段1,字段2)
截取子串 substr(字段名,起始位置,取字符个数)
dual表,是专门用于函数测试和运算的,他只有一条记录
字符串拼接 concat(...,....)
求指定子串 substr(...,起始位置,取字符个数)
可以使用"-"表示从右向左取,取的时候可以从左往友取。
例:select substr(first_name,-2,2) sub from s_emp;(取后两个)
select substr(first_name,2,2) sub from s_emp;(取前两个)
2,数值函数
四舍五入 round(数据,保留小数点后几位)
可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十位)。
例:select round(15.36,1) from dual;
截取数字函数 trunc(数据,保留的位数(小数点后位数))截取个位之后补0
例:select trunc(123.456,1) from dual;
3,日期函数
日期格式,
全日期格式世纪信息,年月日,时分秒。
缺省日期格式,日-月-年 dd-mon-rr
修改当前会话的日期格式,会按照指定的格式输出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
返回当前日期 sysdate
例:select sysdate from dual;
select sysdate+1 from dual;获得明天的日期,加1,单位是天
日期是格式敏感的
求两个日期间相隔了多少个月 months_between(date1,date2)
加减指定数量的月份 add_months(date,月数),月数可以为负,负值就是减去相应的月数。
从date日期开始的第一个星期五 next_day(date,FriDay)
返回月末的日期 last_day(date)
截取日期 trunc(date,'年或月或日或时分秒')
例:select next_day(sysdate,2) from dual;
例:select trunc(add_months(sysdate,1),'month') from dual;
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95','YEAR') 01-JAN-95
TRUNC('25-MAY-95','MONTH') 01-MAY-95
TRUNC('25-MAY-95','YEAR') 01-JAN-95
练习:
返回下个月的第一天的日期
select round(last_day(sysdate),'MONTH') from dual;
select add_months(trunc(sysdate,'MONTH'),1);
4,不同数据类型间转换函数
将日期转成字符 tochar(date,'日期格式')
日期格式要用有效格式,格式大小写敏感'yyyy mm dd hh24:mi:ss',
'year'(全拼的年),'mm'(数字表示的月)'month'(全拼的月),'day'(星期的全拼),'ddspth'(日期的全拼)'yy mm dd'
例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;
将字符转换成数字 to_number('...')
将数字转字符to_char(number,'fmt') fmt是数字格式
将字符串转成日期 to_date('...','日期格式')
例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;
1、等值连接
select [表别名1.字段名1],[表别名2.字段名2],...
from表1表别名1,表2表别名2
where表别名1.字段名3=表别名2.字段名4;
表连接时,当表与表之间有同名字段时,可以加上表名或表的别名,加以区分,使用时要用
表名.字段名或表别名.字段名(列名)。当表的字段名是唯一时,可以不用加上表名或表的别名。
注意:当为表起了别名,就不能再使用表名.字段名。
例:select a.first_name,a.last_name,b.name
from s_emp a,s_dept b
where a.dept_id=b.id;
2、非等值连接
select [表别名1.字段名1],[表别名2.字段名2],...
from表1表别名1,表2表别名2
where表别名1.字段名3.....表别名2.字段名4
....可以使比较运算符,也可以使其他的除了'='的运算符
例:select e.ename, d.grade,e.sal
from emp e,salgrade d
where e.sal between d.losal and d.hisal;
3、自连接
用别名把一张表中的数据分成两部分,然后在使用条件过滤。
select [表别名1.字段名1],[表别名2.字段名2],...
from表1表别名1,表1表别名2
where表别名1.字段名3=表别名2.字段名4;
例:select a.first_name ename,b.first_name cname
from s_emp a,s_emp b
where a.manager_id=b.id;
以上所提到的表连接,都叫做内连接,严格匹配两表的记录。
4、外连接
会使用一方表中的所有记录去和另一格表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。
例:select a.first_name enamei,a.id,b.first_name cname,b.id
from s_emp a,s_emp b
where a.manager_id=b.id(+);
即用a表中的数据去匹配b表的,若b表中有null,系统模拟纪录与其匹配
注意:要把那一方的记录全部都显示出来,还有注意条件(+)跟在要全部选出的对端。
外连接的应用:
列出哪个部门没有员工
select e.deptno,d.deptno
from emp e,dept d
where e.deptno(+)=d.deptno
and e.deptno is null;
三、组函数
group组
group by分组子句,按指定的分组规则分组,这个group by子句可以跟在 select语句后或是 having后面。
group by子句也会出发排序操作,会按分组字段排序。
select [组函数或分组的字段名],... from表名 group by [字段名1],[字段名2],.....;
例:select avg(salary) from s_emp group by dept_id;
注意:组函数可以处理一组数据,返回一个值。
组函数会忽略空值。
avg(..),求平均值,sum(..),求和这两个函数的参数只能是number型的。
以下所提到的函数可以使用任意类型做参数。
count(..),用来统计记录数,可以使用排重命令。count(...)默认使用的是all。
max(..),min(..)求最大值和最小值,
count(*),统计表中记录数。
例:select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.dept_id;
注意:只要写了group by子句,
*** select后就只能用group by后的字段或者是组函数。***
where子句只能够过滤记录,放单行函数。
having子句可以过滤组函数结果或是分组的信息,且写在group by子句后。
例:
select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.id
having sum(a.salary)>4000;
column也可以定义有别名的列的格式。
column"别名"格式定义
注意:要先过滤掉不需要的记录,然后再进行分组操作,提高效率。
四、子查询
子查询,就是可以嵌在任何的sql语句中的select语句。
在select语句中嵌套子查询时,会先执行子查询。一般的会将子查询放在运算符的右边。
注意:在使用子查询时,要注意这个运算符是单行的(也就是只能是单值),还是多行运算符(范围,多值,in)。
配合使用子查询返回的结果必须符合运算符的用法。
例:
select first_name,title
from s_emp
where title=any(select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
select first_name,title
from s_emp
where title in(select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
五、将业务需求转换成可操作的表
一:需求分析
二:画E-R图
三:转换成表关系
四:割接(新老系统交接)
五:
E-R图属性:
*为强制且非空属性
o可选属性(可以有值也可以没有)
#*表示此属性唯一且非空
实体关系:
mastbean maybean
数量关系:多对一关系
一对多关系
一对一关系
多对多关系
第一范式,所有的属性都必须是单值,也就是属性只表示单一的意义。(记录可以重复,没有任何限制)
第二范式,属性要求唯一且非空,(记录不可重复,但是数据可能会出现冗余)。
第三范式,非主属性只能依赖于主属性,不能依赖于其他非主属性。(解决数据冗余问题)
六、约束
约束是针对表中的字段进行定义的。
primary key(主键约束 PK)保证实体的完整性,保证记录的唯一
主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键,只有两个字段放在一起唯一标识记录,叫做联合主键。
foreign key(外建约束 FK)保证引用的完整性,
外键约束,外键的取值是受另外一张表中的主键或唯一值得约束,不能够取其他值,只能够引用主键会唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表,后创建子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。
unuque key(唯一键),值为唯一
index(索引)是数据库特有的一类对象,view(示图)
典型的一对多 class对应多个学生。
student table class table
______________________________ _________________________
| id| name| address| class_id|| id|class_desc|class_num|
|(PK)|______|________|___(FK)__||(pk)|__________|_________|
|||||||||
一对一
student tabel shenfenzheng table
____________________ _________________________________
| id| name| address|| s_id|shenfen_desc|shenfen_num|
|(PK)|______|________||(PK,FK)|____________|___________|
||||||||
多对多
student tabel zhongjian table kecheng table
____________________ _________________________________ __________________
| id| name| address|| s_id|shenfen_desc|shenfen_num|| kid| kechengname|
|(PK)|______|________||(FK,FK)|____________|___________||(PK)|____________|
|||||联合主键||||||
引用对方表的主键,当作本身的主键,所以这个表的主键,既是主键又是外建
建表和其他相关操作
DDL语句
创建表:
create table表名(字段名1类型(数据长度)(default...)约束条件,字段名2类型(数据长度)约束条件);
Oracle数据库中的数据类型
varchar(长度),可变长字符串,char(长度)定长
number(..,..),number表示浮点数,或者是整数
long大对象,clog字符的大对象,相当于文本文件在表中只存放一个相当于只针对值
blog二进制的大对象,也是以相当于指针的形式存放的。
primary key约束:
主键约束的定义:
第一种定义形式:
create table test(c number primary key);列级约束
第二种定义形式:
create table test(c number, primary key(c));表级约束
create table test( c1 number constraints pkc1 primary key);此约束有名字: pkc1
create table test(c number, c2 number, primary key(c,c1));用表级约束可以实现联合主键
foregin key(fk)外键约束:
(先定义父表,再定义子表)
carete table parent(c1 number primary key);
create table child(c number primary key, c2 number references parent(c1));
或表级约束定义:
create table child( c number primary key, c2 number, foreign key(c2) references parent(c1));
如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL
(PK或UK)一对多(FK)
(PK+UK)一对一(FK)或(PK)一对一(PK)
多对对多关系,一般都通过一张中间表来分解成两个一对多的表
建立表
create table[schema]table
schema:一个用户对应一个schema不同用户下的表不能互相查看
select count(*) from s_dept;<===> select count(*) from sd0611.s_dept;
一个表中只能存储一个LONG类型
CLOB存储大的文本对象
BLOB存储大的二进制对象
create table test(c1 number primary key);设置主键
create table test(c1 number constraints test_c1 primary key);定义约束名,默认约束名为SYS_在列后面定义约束称为列级约束
create table test(c1 number primary key(c1));所有列定义完后再定义约束称为表级约束(能定义联合主键)
cretae table test(c1 number,c2 number,priary key(c1,c2));定义联合主键
create table child(c1 number primary key);先要定义父表
create table child(c1 number primary key, c2 number references parent(c1));然后定义子表 references parent定义外键
create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate为级联删除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null删除后将外键置空
create table child(c1 number primary key, c2 number,foreignkey(c2) references parent(c1));
二、约束
1、非空约束(not null)
这是一个列级约束
在建表时,在数据类型的后面加上 not null,也就是在插入时不允许插入空值。
例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));
2、unique唯一约束
唯一约束,是会忽略空值的,唯一约束,要求插入的记录中的值是为一的。
例:create table student(id number,name varchar2(32),address varchar2(32),primary key(id),unique(address));
如果创建一个uk,系统自动建一个唯一索引
3、pk、uk
Oralce支持级联删除,不支持级联更新
4、check约束
检查约束,可以按照指定条件,检查记录的插入。check中不能使用尾列,不能使用函数,不能引用其他字段。
例:create table sal(a1 number, check(a1>1000));
为什么Java不适合游戏开发
作为一个多年游戏服务端开发者,我来回答一下这个问题。只要你仔细去招聘网站看,会发现游戏招java的非常少(我希望杠精不要抬杠,我说的少,而且非常少,并不是说没有)。那么为什么在其他领域的霸主在游戏行业连喝口汤的资格都没有呢?其实主要有两个原因,而且这两个原因都和程序员最关心的效率有关系,一个是开发效率,一个是运行效率。很遗憾的作为一个不上不下的java两个都占不了。
首先是开发效率,在几年前手机游戏开始火爆,游戏公司多,产品相似度高,那么如何能以最快的速度开发完游戏并且上线运营,在快速迭代中试错,降低开发周期就是减少开发成本。在这种环境下,很多脚本语言成了首选,比如nodejs、php甚至还有lua和python(这里多说一句,别看lua语言本身简单,其实lua在游戏领域的使用成本是非常高的,至少在这四种脚本语言中是最高的,因为他只是一个胶水语言,要依附于c/c++,作为游戏周边的库都要自己造轮子或找轮子,同时对于引擎部分来说,对核心开发人员要求也非常高,如果公司没有经验丰富的c/c++程序员,lua基本玩不转)。在这些脚本语言面前,java毫无优势。nodejs开箱即用,用js可以前后端一起写(html5的流行让这种情况更是越来越多)。而php上手容易,开发简单,而且像一些用http的弱交互游戏,热更新简直不要太爽,无感知修bug。一些简单的休闲游戏,用这些脚本语言完全可以很快速的完成,就拿之前比较火的刀塔传奇来说,用这些脚本语言一点压力都没有,还有特别是棋牌类游戏,脚本语言更是首选。
其次再来说说运行效率,在一些密集型计算的游戏中,c++是首选,一些大型游戏,对计算要求很高,业务逻辑复杂的情况下,提升效率就能多容纳在线人数,也是成本的减少。同时对内存要求也高,使用c++可以数着内存写代码(手法过于夸张[捂脸]),对象啥时候申请,啥时候释放都是程序员说了算,gc消耗不存在的。而java生成的都是字节码,代码执行都要经过jvm来跑,这中间的消耗对于那些对性能要求苛刻的程序来说,绝对不能接受。
综合以上两点,java处于运行效率和开发效率中间的语言,在游戏这个行业自然是不会受到青睐。
做游戏引擎,当然还是看性能啦,c的性能最好。java性能其实也很好了,看谁出个简单快速的框架呗
JAVA可以做游戏服务端的开发,也就是网络游戏的开发,网络游戏的实时性高,对高并发,数据的一致性处理要求较高,并且因为是自身JVM的垃圾回收机制对服务器的内核性能要求高,会占用一定的资源去处理这部分数据,游戏的实时性代表了大量数据会经常被更改替换。
JAVA不是不能做,而是对开发人员的能力要求高!如果能够充分利用JAVA的并发优势,那是可以做到的,并且这已经被有些小公司当做网络游戏服务端的开发语言了。
PC端,移动端的单机游戏就不用再考虑JAVA了,显然JAVA的2D3D处理效果没有一些主流的游戏开发语言好!语言具有其使用场景,抓住其优点去利用之,而不是拿它的缺点如何别的语言优点相比!如今JAVA是做服务端开发的不二人选,因为他的帝国大厦已经很完善,开发人员也多!
因为java中间多出来一个jvm,效率低,游戏实时性很重要。
看一个语言适合开发什么,主要有三点
1.效率问题,包括开发效率和执行效率。
2.生态圈,有人家提供好的成套解决方案,为什么不用呢?
3.产品的侧重点。
就拿java和c++来说,java主要用于web开发,但是c++通过cgi也可以写web,而且c++的执行效率甩java几条街,但是为什么不用c++写web呢,因为c++的开发web的效率太低,而java有各种web方面的框架,开发效率高。
如果产品是游戏,游戏实时性很重要,你玩个游戏反应慢半拍那肯定很恼火。游戏这个产品的实时性就注定了要采用高效率的语言开发,那c,c++自然就跑不掉了。
Java何来不适合游戏开发一说的呢?
毕竟游戏有分类,而且游戏也分客户端,服务端
很多游戏的服务端就是Java的
而且实时性要求不高的游戏客户端,也可以用Java开发,例如我的世界
我想题主想问为什么3A大作没有用Java开发的吧
这其实是一个路径绑定问题,目前大作基本上都是用游戏引擎做的,而且这些游戏引擎都是发展多年的,如果用Java做,可能要用没经过业内验证的新东西,大公司不想冒险,还有Java的垃圾回收机制本身也是个难点,不适合做实时性非常强的游戏。
java开发游戏性能和效率差,开发一些小游戏还可以,java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑
对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧
而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能
java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,
当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义
百度搜索圈T社区()免费视频教程
如果你问我java适合开发游戏吗?我回答肯定是适合的,java开发效率高,运行效率一般,需要运行效率的地方用c或者cxx写就好了,现在市面大多数游戏都不是单一编程语言开发的,不需要在语言方面纠结太久。
很多人说,运行效率也很重要,但实际上,一般逻辑,你是感受不出差异的,普通逻辑使用java或者c#,或者脚本语言等这种开发效率,调试效率高的语言会让你开发更舒服。特别是脚本语言。
c和cxx只在特别需要效率的地方才使用。
哈_,这里子期!java开发游戏性能和效率差,开发一些小游戏还可以,远标老师讲过java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑
对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧
而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能
java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,
当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!