导航:首页 > 源码编译 > 编译看左边运行看右边原理

编译看左边运行看右边原理

发布时间:2023-02-03 16:48:27

java中,什么时候需要new来实例化

(1)同一个对象在不同时刻体现出来的不同状态。
(2)多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。

多态的分类:
a:具体类多态
class Fu {}
class Zi extends Fu {}

Fu f = new Zi();
b:抽象类多态
abstract class Fu {}
class Zi extends Fu {}

Fu f = new Zi();
c:接口多态
interface Fu {}
class Zi implements Fu {}

Fu f = new Zi();
(3)多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边

为什么?
因为成员方法有重写。
(4)多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
(5)多态的弊端:
父不能使用子的特有功能。

现象:
子可以当作父使用,父不能当作子使用。
(6)多态中的转型
A:向上转型
从子到父
B:向下转型
从父到子

② 请c的指针牛人解答一下!

printf最终打印4 16 4 2
首先说明下:p是一个指针,它指向了一个数组,这个数组每个单元(元素)也是指针,它可以用来指向short类型的变量。
再给你定义个类型:short **p[4];
short **p[4]和short *(*p)[4]怎么来理解呢?
你要做到向右看一位,再向左看一位,再向右看...
具体分析*(*p)[4],p是个变量,往右看,因为被括号给围住了,所以右边没东西,往左看,看到了*,所以p是个指针变量,接下去看完了左边,再看(*p)的右边,它是[4],就知道了p这个指针指向了有4个元素的数组,看完了右边再看左边,左边还是个*,知道了这个数组是个指针数组。然后还是看右边,由于右边没东西了,所以依旧再看左边,看到了short,于是知道了这个指针数组是指向short类型的。据此,编译器完成了对p的整个解释过程。至于short **p[4]我想请你回答一点:p是什么?是指针还是数组名?用我刚才介绍的方法自己分析下,看掌握了没?告诉你下这里的sizeof(p)等于16;
1)sizeof(p):由于p是个指针,所以计算了指针的长度得到4个字节。(现在的硬件条件下,指针一般都是4个字节的,因为要存放地址嘛,地址是固定的,除非以后操作系统和硬件发生变化,用8个字节表示内存唯一地址,否则地址就会一直是4个字节的)
2)sizeof(*p):由于开始介绍过了,p是指向一个数组的,所以*p就定位到了这个数组,譬如我们可以这样指定:short *pArray[4],这里的pArray是个有4个元素的数组,每个元素可以存放一个可以用来指向short型变量的指针。这时我们可以让p来指向这个数组,代码为*p=pArray。这个时候*p里存放的是pArray数组的地址。因此由于数组里全是指针,共4个。通过计算4*4=16,所以会打印出16来。
3)sizeof(**p):由于*p表示了数组,那么**P就是指的第一个元素,用上面的例子就是pArray[0],因为pArray[0]是个指针,因此打印出4.(**p与pArray[0]是等价的)
4)sizeof(***p):因为通过前面分析知道**p是个指向short类型变量的指针,因此***p就是最终的那个short类型的变量了。由于short是2个字节的数据,因此sizeof(***p)打印出2

其实这道题还是比较简单的,不算难的。你唯一需要一定吃透的知识点是:指针和数组的关系,数组首地址的关系,以及数组和指针的区别(譬如p可以p++做自增运算,pArray就不可以)。说说简单,要完全吃透还是要靠自己多花点时间体会的,吃透了指针和数组的关系,这道题就迎刃而解了。但你没完全领会它们的关系,哪怕有一点没理解,我觉得这道题要答对,非常难!!
补充一点,楼上的兄弟有回答是2 8 2 2也是正确的。由于在不同的环境下,用的地址编码格式不同,所以有的会用4个字节来唯一表示一个内存地址,而有的会用2个字节来表示唯一地址,TC是这样的,16位编译器顾名思意就是2字节寻址法,肯定是2个字节喽。但最多的还是4字节寻址!要想看2字节的,你到DOS的环境下用纯TC试下,很有趣的!

③ C语言考试编译、连接、运行是哪几个图标

在vs2010中,编译 是在 生成菜单 下的最后一个
链接 是 在 生成菜单 下的生成 或者生成解决方案
运行 是 在 调试菜单 下的开始执行(不调试)
图标就可以参照这些对应的看了

或者在工具栏上右击选择 生成工具栏就可以把这些按钮弄出来了

编译需要这么弄:工具->自定义->命令页面下类别选择生成,然后在命令栏里把编译按钮拖到想放的工具栏上就可以了

④ 谁告诉我java多态里类变量是怎么赋值的

我的理解是看对象前面的类型。
第一个的类型是A,所以输出的属性就是A里面的属性,然后方法的话,应为子类重写了父类的方法,所以使用子类的。
第二个。对象的类型是B,是由a强制转换来的,还是针对属性看a的,方法是看b的
最终的总结是:
成员变量:编译看左边,运行看左边;
成员方法:编译看左边,运行看右边:
静态方法: 编译看左边,运行看左边

⑤ 在java多态中,编译看左边,运行看右边是什么意思,哪位大侠能帮忙详细解释一下 谢谢了.

Animal c = new Cat(); 左边是 Animal 类(或接口) 右边是 Cat()类; 在编译的时候编译器不管你右边是什么类,只要左边的Animal类(或接口)能编译通过就不会报错。但是运行的时候就要按照右边的Cat()类实际情况来运行。

⑥ 左结合问题~和编译原理有关

晕死,LETER(LETER|DIGITIL)* 的这个*不是乘法运算符,是编译原理中的一个表述符,是放在标识符右上角的,比如a*就表示取0个或任意个a

⑦ ++a || ++b && ++c在C语言中怎么计算

int a=0,b=0,c=0,k=0;//以下用到的所有变量都赋初值0

k=++a || ++b &&++c;

printf("a=%d b=%d c=%d ",a,b,c);

printf("k=%d ",k);


分析

很多地方说此处计算要用到优先级,其实不然

1、如果按照优先级相等来运算: ++a后a==1,++b被短路b==0,c==1

则应输出 a=1 b=0 c=1 k=1

编译运行:


分析正确

⑧ 左结合和右结合的问题~和编译原理有关

B与第一个*结合:用编译原理的运算符的结合性来解释的话,就是假设*是左结合的。当运算分量(本例中是B)两侧都有运算符(本例中是*)的时候,采用左结合。即B与B左边的*结合。
eg: L —>A*B*C 先计算 A*B 然后计算(A*B)*C。
不知道你懂么??

⑨ 编译原理中的右线性和左线性怎么看

如S-->Sa 就是左线性,S-->aS就是右线性。看非终结符在最走还是最右

⑩ C++代码怎样看运行顺序,代码看一段不知道下面从什么地方开始看啦。

按F9 在当前鼠标出下断点,断点必须在程序可以运行到的语句处
菜单 工具-->开始调试,就会停在断点处

F10 单步执行语句,遇到函数调用会越过
类似于汇编下debug的 p命令
F11 单步执行语句,遇到函数调用会跟进
类似于汇编下debug的 t 命令

鼠标在某处右击,选run to cursor,代码就会执行到当前鼠标位置的语句,
类似于汇编下debug的 G 命令

阅读全文

与编译看左边运行看右边原理相关的资料

热点内容
善良小夷子女演员 浏览:973
大奶女电影版 浏览:653
汽车遥控编程器 浏览:784
方舟在服务器如何发全体文字 浏览:346
一部很多女子格斗的电影 浏览:770
外国大胸美女电影推荐 浏览:208
大尺很色床戏电影 浏览:432
郑州阿里程序员 浏览:131
韩国爱情推理片全部复制 浏览:462
台湾影视国语 浏览:571
穿越之我那三千个兄弟训诫 浏览:486
连母亲都收的小说 浏览:839
叶子媚演过尺较大的电影在线观看 浏览:832
app反感怎么解决 浏览:332
极光设置app是什么 浏览:79
app广告怎么赚钱 浏览:917
男主被系统控制的小说下载 浏览:951
钛2电影高清完整版 浏览:440
linux启动项目命令 浏览:531
乳山迷雾txt全文阅读全文小说 浏览:885