< > <= >= instanceof(Java特有)
解释,当你拿到一个对象的引用时(例如参数),你可能需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,使用instanceof操作符判断,第一个结果为true的类即为引用真正指向的类。
在 Java 中,包是类、接口或其它包的集合,包主要用来将类组织起来成为组,从而对
类进行管理。
没有像VS里的#region,#endregion一样的代码段区域
java中声明”属性”:
//声明两个私有字段
private String name;
private int age;
//分别实现set和get方法
public void setName(String name)
{
this.name= name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age= age;
}
C#
private string name;
private int age;
//方法一:声明访问器
public string Name
{
set { this.name = value; }
get { return this.name; }
}
public int Age
{
set { this.age = value; }
get { return this.age; }
}
java中定义和访问均要用get和set方法,可以不成对出现。
c#中是真正的属性,定义时get和set必须同时出现,房问时用.号即可。不用get,set
C#中,不用任何范围修饰符时,默认的是protect,因而不能在类外被访问.
因为JAVA规定,在一个文件中只能有一个public类,而且这个类的名称必须与文件名一模一样,这是一个区别
对于for循环,java和C#的用法是一样的,但是foreach语句在java中的形式是不同的,
public static void main(String[] args){
int[] array1={1,2,3,4,5};
for(int item:array1){
System.out.println(item)
}
}
public void Main(string[] args)
{
foreach(int item in array1){
Cosole.WriteLine(item);
}
}
C#中的==与java的==是不一样的,java的==只能比较对象的引用
比如:“1”==1.ToString(),这在C#和java中的结果就不一样了
C#还新增了四种整型,分别是sbyte,ushort,uint,ulong
Java和C#一样,都是强类型(即类型明确)语言,所以当遇到不同数据类型同时操作时,就需要进行数据类型转换。
在C#中方法名一般用pascal帕斯卡命名法,即每个单词首字母都大写,而在java中,方法名一般用camel骆驼命名法,即第一个单词首字母小写,后面的单词首字母都大写。
可以看出,访问修饰符的概念java和C#差不多,只不过C#中不仅包括以下三种修饰符,还包括更多的修饰符比如internal等。另外,有一个概念的区别需要我们注意,java中的包(即jar包),在C#中一般称为程序集(即dll)。
在java中类实现接口使用implements关键字,实现继承使用extends,而在.net中是用符号”:”来实现的
Package这个是java独有的,而import有点类似于.net中的using。
java与.net不同的是,在java中引用父类用super,而在C#中则使用base。
C#中的访问修饰符与Java中的基本对应,但多出了一个internal。internal:成员只能从同一程序集的内部访问。
由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词
JAVA的接口可以定义变量
interface abc
{
int num=1;
}
java多了一个>>>操作符(被移位二进制最高位无论是0或者是1,空缺位都用0补)
继承的不同。java继承类通过extends,实现接口通过implements,接口继承接口通过extends C# 都是通过":"
接口的不同
java中接口可以定义变量,C# 不可以,C# 只能是属性,方法,索引器。
数组定义的区别
int myInt[][]=new int[5][10]; JAVA
int[,] myInt=new int[5,10]; C#
三大特性-封装
封装:为了隐藏内部的实现细节,达到对数据安全性的保护和代码重用的效果的一种手段。
封装无处不在,看似简单却可无限延伸。并没有一个明确的关键字来表示封装。既然是思想,是手段,所有在java中和c#中是没有语法区别的。仅仅是他们在借助访问修饰符来达到封装的效果时,两种语言的访问修饰符是不一样的。
Java中:
private:私有的,仅内部可以访问
dufault:默认的,同一包的内部可以访问。
protected:受保护的,同一包中或者是不同包的子类中可以访问。
public:公共的,任何地方可以访问。
特点:有明确的大小统属关系:private < default < protected < public
C#中(引入程序集的概念。命名空间类似于java中的包,但它是逻辑分组不同于java中的包是物理分组,程序集类似于一个项目):
private:私有的,仅内部可以访问。
intenal:内部的,同一程序集的内部可以访问,同default。
protected:受保护的,子类中可以访问,和java中protected是不同的,此处范围要小些,同程序集的非子类不能访问。
proteted intenal:是intenal和protected访问范围的并集。
public:公共的,任何地方可以访问。
特点:没有明确的大小统属关系,intenal和protected的访问范围大小是分不清的。
Java中:使用extends表示使用继承
重写的要求:a、方法名、返回值类型、参数相同;b、访问修饰符访问范围要大于或等于父类方法访问修饰符;
访问父类成员:使用super关键字,可使用super(参数);在构造方法中指定调用父类一个构造方法。
三大特性-继承
C#中:使用:表示使用继承
重写的要求:a、方法名、返回值类型、参数、访问修饰符相同;b、父类方法被virtual修饰,子类方法被override修饰
访问父类成功:使用base关键字,在构造方法后使用:base(参数);指定调用父类构造方法,base不能使用在静态环境中,不能调用父类静态成员。
覆盖:使用new关键字。在c#中引入覆盖的内容,对父类的非virtual方法,也就是不可重写的方法,使用覆盖,可以覆盖掉父类的方法。对覆盖我的看法是为了弥补必须被virtual修饰的方法才能重写这个限制可能带来的问题,但是能不用就不用,覆盖意义不大,或者说是我还没有真切体会到覆盖的实际作用和使用场合,有高人可以评论解惑。
判断是否重写成功的依据:使用父类的引用指向子类的对象,如果该方法调用的是父类方法说明重写不成功,如果调用到子类方法,说明重写成功。
Java C# .net 和 C C++ 跨平台的区别
1、windows系统WP8上主要支持 VB, C#, c/c++,
2、苹果系统ios上支持 object-c, c/c++
3、android系统上支持 java, c/c++
2、
C# .net Java的跨平台是指它们在“编译系统”生成的中间文件的字节码(byte code)文件不需要重新编译,就可以直接被“运行系统”使用;
C/C++的跨平台是指不要重新写代码,需要重新编译成“运行系统”对应的机器码(binary code)后,才能够被“运行系统”使用;
3、
ava, C#的跨平台受“虚拟机”的限制,如:
1、.net环境只在windows上有,linux(Android)和unix(ios)都不支持;
2、Java手机平台主要是Android支持,windows(WP8)和mac(ios系统)都不支持;
3、.net ,和Java虚拟机在xp系统上默认是没安装的;
4、xp系统不支持.net的高版本,如.net 4.5
c/c++不受虚拟机的限制,只要能够编译成“运行系统”的“机器码”即可,这也是为什么现在大量的跨平台应用开发采用c/c++的原因;