勇哥注:
这个系列的贴子主要是从C#的对比来学习java的不一样。
(一)idea
(1)idea的工程如下
project-->module-->package-->class
其中package其实就是目录 。
我们选中src,右键新建package,创建包名为com.skcircle.hello ,这个时候你会发现其实是在src目录下创建了com\skcircle\hello,
即创建了三个目录。
一般起包的名字习惯用公司域名倒过来写的方式,所以有了com.skcircle.用途描述
(2)快捷键
main, psvm, sout 这个是idea的语法补全,这个设计有点弱智
ctrl+d 复制当前行数据到下一行
ctrl+alt+L 格式化代码
Alt+shift+上箭头 上下移动代码
ctrl+/, 单行注释,因为跟五笔的快捷键有冲突,所以推荐用下面的块注释
ctrl+shift+/ 块注释,先选中要注释的内容,取消注释也是这个
(3)bin目录结构
Module1 可以找到java扩展名的源码
out 可以找到编译后的文件 .class
(二)java语法
勇哥注: 主要拿C#来对比。
(1)
简单数据类型没啥区别
字符串与数值的转换差不多
强制转换写法是一样的。
String s1="123"; int k1=0; double k2=0; float k3=0.0f; long k4=0x500; try { int a1=Integer.parseInt(s1); String s2=Integer.toString((int)k4); } catch(NumberFormatException ex) { System.out.println("error:"+ex.getMessage()); }
(2)
java没foreach,可以这样写:
int[] numbers = {1, 2, 3, 4, 5}; for (int number : numbers) { System.out.println(number); }
java中的List<T>是个泛型接口,它的实现类是ArrayList,Vector等,不能直接new List
这个东西不太方便 ,特别是不能直接[i]下标访问。
List<String> list1=new ArrayList<>(); for(int i=0;i<10;i++) { list1.add(Integer.toString(i)); System.out.println(list1.get(i)); }
for, if, break, do while这些没啥区别
(3)
java没有属性,所以没有get;set,你得自己写方法代替。
java没有特性,没有委托
java没有结构体
数组的定义没区别。
枚举没大区别
java的集合分四类:
(A)List 列表
ArraryList 动态数组,效率低,是线程安全的
LinkedList 基于链表的实现,是线程安全的
Vector 类似ArrayList, 所有方法为同步方法,线程安全
(B)Set 集合
不包含重复元素的集合,不保证元素顺序
HashSet
LinkedHashSet
TreeSet
(C)Map 映射
键与值的对象,类似C#中的字典
HashMap
LinkedHashMap
TreeMap
(D)其它
Queue 队列
Deque 双端队列
Stack 栈
(4)
一个java文件只能有一个public类,其它的类不能加任何的访问限制符
package com.skcircle.hello; import java.util.ArrayList; import java.util.List; enum studentEnum { 中国,k2,k3,k4 } public class test1 { public static void main(String[] args) { String s1="123"; int k1=0; double k2=0; float k3=0.0f; long k4=0x500; try { int a1=Integer.parseInt(s1); String s2=Integer.toString((int)k4); } catch(NumberFormatException ex) { System.out.println("error:"+ex.getMessage()); } int[] numbers = {1, 2, 3, 4, 5}; for (int number : numbers) { System.out.println(number); } List<String> list1=new ArrayList<>(); for(int i=0;i<10;i++) { list1.add(Integer.toString(i)); System.out.println(list1.get(i)); } myclass1 c1=new myclass1(); c1.name="lxy"; c1.age=22; System.out.println(c1.name); System.out.println("hello world"); } } class myclass1 { String name; int age; }
idea的项目:
(5)
java没有C#的dll的概念。与之类似的功能有两种:
1. JAR(Java Archive)文件
JAR 文件是 Java 的一种打包文件格式,用于将多个 Java 类文件、相关的元数据和资源(如文本、图片等)
打包成一个文件。这与 C# 的 DLL 文件在功能上有些相似,都是用于代码的封装和分发。
JAR 文件可以被 Java 虚拟机(JVM)直接加载和执行,
或者作为应用程序和库的一部分被其他 Java 程序引用。
2. 类库(Libraries):
在 Java 中,类库是一组已编译的 Java 类,它们提供了可以被其他 Java 程序复用的功能。
这些类库可以打包成 JAR 文件,并在项目中通过类路径(classpath)来引用。
Java 标准库(Java Standard Library)是一组 Java 提供的核心类库,
包含了大量的基础类和接口,用于支持 Java 程序的日常开发。
(6)
java是不能直接调用C#代码的,包括引用C#的dll。
反过来,C#也是不能直接调用java代码的。
其原因是C#运行在CLR上的,java则运行在JVM上的。两者机制完全不同。
一般建议直接采用soap或者rest方式调用。
但是java是可以引用c++导出来的dll的。
Java 可以通过 JNI(Java Native Interface)来引用 C++ 导出的 DLL(在 Windows 上)
或 so 文件(在 Linux 或 macOS 上)。
JNI 是 Java 提供的一种标准编程接口,
允许 Java 代码和其他语言写的应用程序或库(尤其是 C 和 C++)进行交互。
如果想调用win32 api的话,可以选择下面4种:
JNI (Java Native Interface):
JNA (Java Native Access):
第三方库
运行时库和框架
另外,JNI是可以调用com接口的,但是仅限于windows下。

