<1>Java介绍
1) Java的特点
简单易学
是c和c++的变种,而且摒弃了其中容易引起程序错误的地方,比如结构体,内存回收等。提供了丰富的类库。完全面向对象。
安全性高
这是强类型的语言,类型检查严格。提供垃圾回收机制,不用担心c里面的内存泄漏问题。禁止在没有授权的情况下非法访问内存。
跨平台
源代码(你敲出的东西)会被编译成一种和机器无关的字节码,在java虚拟机上运行。只要有java虚拟机,不同的机器都能执行这种字节码。
多线程的
同一个程序可以执行多个任务。比如c,代码只能先执行上面的,再执行下面的。但是java可以上下同时执行。
2) 关于所谓的跨平台的进一步解释
程序的执行过程
用户↔高级语言程序↔编译器↔os↔硬件
编译器是把你敲出的代码变成一个可执行文件的东西。
用户敲代码,变成高级语言程序,经过编译器的编译,生成硬件可以执行的机器码,经过os的调度,由硬件执行。
C这种是不可以跨平台的,为什么?因为不同pc的编译器,os,硬件是不同的。你输入的代码,要实现一个功能,在这台pc上,经过编译之后形成的机器语言和在那台pc经过编译后形成的机器语言是不相同的,在这台pc上os调度的方式和那台pc上调度的方式不同,这台pc对机器语言执行的方式和那台pc对机器语言执行的方式也不同。那么执行的结果肯定不同了,所以不能跨平台。但是java可以,为什么?因为java可以实现源代码编译后生成和机器无关的字节码,而且针对不同的pc会装有不同os下解释这个字节码的虚拟机,以此来实现相同的功能,图示如下。
c: application for Mac application for windows application for Linux
↕ ↕ ↕
Mac windows Linux
要实现同一个功能,就需要为不同pc设计不同的程序
java:application 变成字节码文件后,经不同的JVM执行
JVM for Mac JVM for windows JVM for Linux
↕ ↕ ↕
Mac windows Linux
同一个程序,变成字节码后,通过JVM虚拟机转化为pc的特定语言来实现
3) c和java的编译和执行
c: windows下的c语言源程序(扩展名为.c)
↕
windows的可执行文件(扩展名为.exe)
↕执行
windows os
java: Java语言源程序(扩展名为.java)
↕java编译器
Java字节码文件(扩展名为.class)
↕
JVM虚拟机
Mac下的字节码解释程序 windows下的字节码解释程序 Linux下的字节码解释程序
↕执行 ↕执行 ↕执行
Mac os windows os Linux os
在每个pc上,都有其独特的JVM,java源程序和字节码和机器无关,但是JVM和机器有关
4) java的应用领域
JavaSE:桌面应用软件 JavaME:嵌入式软件开发 JavaEE:网络编程
5) 举例说明Java设计思想
class Tirangle
{int a;
int b;
int c;
int zhouchang()
{
return a+b+c;
}
double area()
{
double p=1.0*(a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));// 对于Math.sqrt的理解,可以理解为一个Math大工具里,有一个sqrt小工具被调用了。
}
}
总体思想是,将Triangle看成一个事物的模型。
静态属性和动态可执行方法:
a,b,c三边是它的静态属性,就像一个人,有手,有鼻子,有眼睛,这是静态属性。
函数在java中也叫方法,函数zhouchang和函数area是Triangle的动态可执行方法,方法的逻辑意义代表的是一个事物可以执行的操作。就像人可以吃饭,运动,这是人的动态可执行方法。
动态可执行方法不需传参:
这里的两个方法不需要像c语言里面那样传入参数,可以直接调用a,b,c。因为方法和静态属性都属于同一个事物,我用我自己的手吃饭,难道还要请求什么嘛?所以不用传参。但是需要传
参时,也可以传参。
类和对象:
这里的Triangle,只表示一个事物的模型,它只定义了一种叫三角形的事物,并没有真的三角形被创造出来,相当于只有一个设计图纸,没有实物。设计图纸叫类,实物叫对象。
Java创造对象的方法:
C语言中,生成一个类型为A的事物是A *q=(A*)malloc(sizeof(A)),那么对于这个Triangle,就应该是Triangle *q=(Triangle*)malloc(sizeof(Triangle))。在java中,使用
Triangle q= new Triangle()是同一个效果。其中q是指针,存放的是生成的Triangle对象的地址。使用q.a,q.zhouchang()这种形式可以调用静态属性和可执行方法。
6) 零碎知识点
double p=(a+b+c)/2; abc都是整型,不报错。int隐形转换为double,不会影响精度。
int p=6.6; 报错,丢失精度。
double和float都用%f来当输入输出控制符,c语言中double用%lf,float用%f。
<2>结合c对java的基本知识的了解
1)环境变量
DOS窗口下,要执行一个.exe可执行文件,需要先进入这个.exe文件的所在目录。同时,.exe文件的执行,需要先经过javac.exe文件的编译,再经过java.exe文件的执行。那么这样一来,因为java和javac文件也是.exe文件,那我就要在这个目录下运行三个.exe文件,那么这个可执行文件就需要和javac,java文件在同一个文件夹。那么,我现在想要只进入这个.exe的所在目录,而且javac,java文件不在这个目录里也能执行,怎么办呢?这个时候,就需要环境变量。环境变量可以存储路径,当我们想运行某个文件的时候,如果在当前目录找不到此文件,pc就会在环境变量的路径里去寻找文件。那么我需要把java和javac的所在路径,存入环境变量里。这样的话,当我进入.exe文件的所在目录里时,要使用java和javac文件,在当前目录里找不到。由于我事先在环境变量里配置了java和javac的路径,那么此时pc会按照事先配置的路径去寻找java和javac文件,仍然可以使用javac文件进行编译,java文件进行执行。
Java源程序→javac.exe编译→生成.class的字节码文件→java.exe执行
2)文件名和类名不同时编译运行的问题
编译时候使用源程序(.java)的名字,比如Test.java。执行时敲编译后产生的字节码文件(.class)名字,比如A.class。那么源程序的名字是Test源程序怎么会产生名字是A的字节码文件呢?实际上,Test.java的源程序代码是这样的。
class A//那个叫A的字节码文件是因为主函数的类名这里来的
{
public static void main(String[] args)
{System.out.println(“a”);}
}
3)标识符的形式
以字母,下划线,美元符做开头
4)变量
基本数据和引用数据类型
基本数据类型有:数值型,字符型(char),布尔型(boolean)
数值型有整型(byte,int,short int,long int)和浮点型(float,double)
布尔型只有两个取值,true和flase。
引用数据类型有:类(class),接口(interface),数组
变量所占字节
byte 1 short int 2 int 4 long int 8
float 4 double 8 char 2 boolean 1
输出数据的格式控制
%d 整型
%f 浮点型
%x,%#x,%X,%#X int,long int
%c char
%s String(字符串)
%b boolean
数据类型转换
低精度向高精度转换可以,不会丢失精度。
比如:double i=4;
高精度不可以转换为低精度,因为丢失精度报错。但是我非要,怎么办?
比如:byte a=10;int b=6;a=(byte) b;即使用强制类型转化。
注意只是把b的数据搞出一个相同的临时数据强制类型转化后赋给了a,b的值本身不
变,仍然是int。
5)常量
整型常量:默认是int,如果数字过大在末尾加上L说明是long int类型的。
浮点型常量:默认是double,把double赋给float,会报错比如:float a=2.2;
字符常量:用单引号括起来,使用Unicode编码,一个字符占两个字节
‘\u0030’:指的是在Unicode编码下,十六进制的0030所代表的字符
比如:char a=‘中’;char b=‘\u4e2d’。System.out.printf(“%c,%c”,a,b)。输出的都是中。
转义字符: \\反斜线 \b退格 \r回车 \n换行 \’单引号
布尔型:c语言中,非0为真0为假。java中,true就是true不是1,flase就是flase不是0。
布尔型数据只能参加逻辑关系运算,if,while进行真假判断时候只能用逻辑表达式
6)运算符
算数运算符+ - * / %
关于+:可以表示字符串的连接,比如:“123”+“abc”,结果是“123abc”
可以表示非字符串转化为字符出啊,比如:“x”+123,结果是“x123”
System.out.println(‘a’+1);//输出98 System.out.println(“”+‘a‘+‘1’);//输出a1 记住就行
关于%:被余数和余数可以有实数,c语言必须要求先后都为整数
位运算符:右移有两种:>>当作有符号数,最高位是什么补什么,>>>补0。左移类似
逻辑运算符(同c)
赋值运算符(同c)
7) Unicode编码
用于java中字符型数据的存储,类似c中的ASCII
Unicode编码是对ASCII编码的扩充,原来的ASCII编码没有重新定义,只是在前面加上了八个0,改成了Unicode编码的形式。
<3>面向对象编程
1) 面向过程
自顶向下的设计模式
main()分为 subFunction1() subFunction2() subFunction3(),subFuction1()分为subsubfunction1() subsubfunction1()
思想:将大问题转化为一个个的小问题,用函数来作为划分程序的基本单位,然后利用函数把这些小问题一一实现,以算法为核心。
缺点:
数据和操作分离,数据的安全性得不到保证。
表现在任何操作都可以访问数据。
程序架构的依赖关系不合理。
主函数依赖于各个sub函数,各个sub函数又依赖于更小的函数。程序能否运行取决于细节的实现,有一细节错误,则整个程序不能运行。
对于需求不明确,变动较大,规模很大的问题,显得力不从心。
2) 面向对象
思想:自下而上的设计,先从问题的一部分来看,一点点地构建出整个程序,用类作为划分程序的基本单位。确定问题由哪些事物组成,先用类模拟出该些事物。
缺点:对于需求明确,变动较小,规模不大的问题,显得十分累赘。 标签:exe,java,字节,pc,--,基本知识,int,执行 From: https://www.cnblogs.com/fjcz/p/16977116.html