目录
- 嵌入式学JAVA
- Java安卓开发环境搭建并运行HelloWorld
- 概念引入
- JavaSE,EE,ME的区别
- JRE
- JDK
- 编程实操:从C面向过程转变
- 变量定义与输出
- 数组的定义与遍历(循环、控制、选择和C完全一样)
- 函数的调用:类比c语言结构体的使用
- 输入数据:Scanner
嵌入式学JAVA
嵌入式学习JAVA是为了安卓开发,做UI界面。
早期2009–2012年,塞班系统横行,其所有应用均是采用C++和QT方案。
2009-2017年,嵌入式UI采用的基本上都是C++和QT方案,但现在嵌入式使用安卓趋势越来越多,以及最近鸿蒙系统被讨论的火热,我们现在学习安卓的应用以及安卓中间件是非常有必要的,即便未来鸿蒙发展起来了,也不会有特别大的鸿沟去对接;如果鸿蒙没有发展起来,它的市场占有也一定超过IOS(闭源)。所以现在嵌入式的C++和QT方案不提倡去学习了,老产品了。安卓中间件有C++和C语言部分的知识,学完JAVA学习C++会变得简单。未来也可以无缝对接鸿蒙系统的应用层和底层,这就是为什么现在嵌入式要学习JAVA的原因。
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。软件语言采用:C/C++(底层)、Java、Kotlin等(应用层)。
Java安卓开发环境搭建并运行HelloWorld
开发环境搭建
开发环境支持JAVA和安卓的开发,开发环境安装包下载路径如下,解压后双击eclipse.exe即可运行。
链接: https://pan.baidu.com/s/1j4vwyLngN5tRxRGK-YUIjA
提取码: 6ysj
运行HelloWorld
概念引入
JavaSE,EE,ME的区别
具体区别
Java SE(Java Standard Edition)
SE(标准版)主要用于桌面程序,控制台开发(JFC)
Java EE(Java Enterprise Edition)
EE(企业版)企业级开发(JSP,EJB):网站开发和基于 b/s模式的编程
Java ME(Java Mobile Edition)
ME(微缩版)嵌入式开发(手机,小家电):手机软件游戏编程
与过往学习的简单类比
SE 就像第一阶段,C语言,是基础。
EE 就像第二阶段,Linux系统编程,多了一些接口api,主要是Web服务(早期)
ME 就像第三阶段,ARM设备开发对应的api。主要是电子产品,嵌入式设备
JRE
Java运行环境(Java Runtime Environment,简称JRE)是一个软件,JRE可以让计算机系统运行Java应用程序(Java Application)。JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)。
java之所以跨平台就是因为有JRE,只要有JRE就能运行java。
JDK
JDK(Java Development ToolKit),是Java语言开发工具包。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
从这些最简单的东西开始了解java吧。直接记下老师上课讲的例子就够了,都很简单。
编程实操:从C面向过程转变
变量定义与输出
public class Test {public static void main(String[] args) { //写完main用ALT+?然后回车就出来了System.out.println("hello world");//ln是带有回车符号的print //syso快速写出这个函数int a; //变量也是这么定义的a = 10;int b;b = 20;System.out.println("a="+a);//sout是这个输出函数的简写,打完回车即可System.out.println("b="+b);//C语言要占位符int c = a + b;System.out.println("c="+c);System.out.println("a="+a + " b="+b + " c="+c);//想要连起来输出这个加号就是必须的//C 语言中:printf("%d + %d = %d",a,b,c);System.out.println(a +"+"+ b +"="+ c);//+相当于一个连续符//alt shift f10 是选择文件运行,ctrl+alt+f10是快速运行当前选择的文件float f = (float) 0.1; //在这个环境中小数一概认定为double类型,强制类型转换double d = 0.2;System.out.println("f="+f);System.out.println("d="+d);}
}
数组的定义与遍历(循环、控制、选择和C完全一样)
public class array {public static void main(String[] args) {//定义的时候初始化//int[] score = {1,2,3};//在定义的时候不允许写数组的大小//开辟空间,等待输入int[] num = new int[3]; //不要int num[],规范起来//也可以分开//int []a = null;//java中的null是小写//a = new int[3];int i; //数组的遍历也是使用下标for (i=0;i<num.length;i++){ //不用再sizeof(num)/sizeof(num[0]),这就是面向对象的魅力num[i] = i;}for(i=0;i<num.length;i++){System.out.println(num[i]);// 下标法访问}}}
函数的调用:类比c语言结构体的使用
//对比C语言的结构体
/*
struct Test{int a;char name[128];void (*pFunc)();
};void myPrint(){printf("陈立臣没我帅\n");}int main(){struct Test stu1 = {.a = 10,.name = "小明",.pFunc = myPrint,//对函数指针的赋值只需要函数名即可,函数名就是地址};stu1.pFunc();//和下面JAVA中不用static很像}*/public class func { //整个类就像一个结构体int score; int age; int num = 10; static void myPrint()//main函数要想调用的话此处前面要加static{ //否则IDEA也不给你补全,输入函数名的过程还一直报错System.out.println("陈立臣没我帅");}static void putAIn(int a){System.out.println("a的值是"+a);}void addB(int b){ //不写static就能让main函数调用的方法b = b + 1; System.out.println("b++的值是"+b);}public static void main(String[] args) {myPrint(); //要用staticputAIn(100); //要用staticfunc t = new func();//不用static,通过变量来调,类似于C语言,//要使用结构体里的函数指针,就要有一个实际的对象t.addB(5); //调用}
}
输入数据:Scanner
import java.util.Scanner; //自己跳出来的包 main函数输入了scanner后ctrl+shift+opublic class input {public static void main(String[] args) {Scanner sc = new Scanner(System.in); //这是个类,可以理解为C里面的结构体,类里面有实现的函数供你调用//变量 开辟空间 传递参数 //结构体肯定要定义出一个变量来,要开辟空间,从系统的输入来进行浏览//scanner不认识(嘿嘿,我的IDEA输入完成后自动导入了包),//如果没导入,通过ctrl+shift+o来入包(包是放在系统中)int a;String str; //对于java没有char* 这种。char str[128];float f;double d;System.out.println("请输入一个整型数");a = sc.nextInt();System.out.println("请输入字符串");sc.nextLine(); //要把上面的回车吸收了,否则str=回车,直接跳到输入浮点数str = sc.nextLine();System.out.println("请输入一个浮点数");//sc.nextLine();那为什么这里不用吸收回车呢?f = sc.nextFloat();System.out.println("请再输入一个小数");d = sc.nextDouble(); //这里也不用吸收来自上面的回车,难道只需要吸收第一个回车?System.out.println(" "+a + " "+str + " "+f + " "+d);} //显示空格
}
导包(波浪线不认识):main函数输入了scanner后ctrl+shift+o自动导包