简单的java有关问题

简单的java问题
1、今天我们学了三目运算符我想问个问题:
public class D4 { 
  public static void main(String[] args) {
  int a=1;b=2; 
  a> b? System.out.print(a):System.out.print(b); 
  }
}
我运行这个的时候为什么说我这个三目运算符不是语句,应该怎么改才对啊?
2、取余,我记得是整数才能取余吧,为什么java里面对浮点数也可以取余啊?
3、public class D4 { 
  public static void main(String[] args) {
  char a='a';
char b='b';
char c=120+11;
char c=a+b;
short e=10;
short r=20;
short d= e+r;

  }  
}
这个我任然搞不懂,c=120+11;这里120为int,11为int,按道理说他们相加为int赋给char c应该丢失精度,但是运行正常
如果前面可以的话,为什么c=a+b就会丢失精度,还有short e=10,10为int型为什么能赋给e啊,却没有进行强制转换,
谢谢各位高手解答下。

------解决方案--------------------
2、java本来就支持浮点数取余,你记得是肯定不是java语言
------解决方案--------------------
Java code

public class D4 {
    public static void main(String[] args) {
    int a = 1, b = 2;// 把“;”改为“,”
    System.out.print(a > b ? a : b);
    }
}

------解决方案--------------------
1,public class D4
{
public static void main(String[] args)
{
int a = 1, b = 2;
int flag = a > b ? a : b;
System.out.println(flag);
}
}

2,浮点数再java里本来就有取余运算。

3,在java虚拟机中char、short、byte都默认成int类型存储,只有当直接赋值的时候会系统直接强转。当赋值运算符后面跟的是表达式时,它就不是直接赋值,所以它要手动的强转。
c=120+11;11和120时常量,在虚拟机中常量的运算是最优先的,也就是还没有运行到c=120+11时,虚拟机就已经把120+11=131运算好了,当运行到c=120+11时直接将131赋值给c ,它也就等同于直接赋值运算。
c=a+b;a和b虽然里面放的是常量,但是a,b只是'a','b'地址的引用,a+b时它不是一个常量,而是一个表达式,它需要人工的强转如:c = (char)(a + b);
同样short也是一样的道理。