java学习笔记--java介绍,常变量,环境变量,面向对象的理解

<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)内存分配

敲出的源程序原来在硬盘上,由os调入内存。调入内存后,os对代码进行解读,把代码划分为四个部分,存入内存中的四个区。对应关系如下:

heap(堆)存放new出来的东西,stack(栈)存放局部变量, data segment存放静态变量和字符串常量,code segment存放代码。其中,堆中的东西手动释放,栈中的东西系统自动释放

 

5)文件名和类名不同时编译运行的问题

编译时候使用源程序(.java)的名字,比如Test.java。执行时敲编译后产生的字节码文件(.class)名字,比如A.class。那么源程序的名字是Test源程序怎么会产生名字是A的字节码文件呢?实际上,Test.java的源程序代码是这样的。

class A//那个叫A的字节码文件是因为主函数的类名这里来的

{

public static void main(String[] args)

{System.out.println(“a”);}

}

 

5)java的应用领域

J2SE:桌面应用软件    J2ME:嵌入式软件开发  J2EE:网络编程

 

<2>环境变量

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执行

 

<3>变量

1) 标识符的形式

以字母,下划线,美元符做开头

 

2)基本数据和引用数据类型

基本数据类型有:数值型,字符型(char),布尔型(boolean)

        数值型有整型(byte,int,short int,long int)和浮点型(float,double)

        布尔型只有两个取值,true和flase。

引用数据类型有:类(class),接口(interface),数组

 

3)变量所占字节

byte 1   short int 2   int 4   long int 8

float 4   double 8    char 2  boolean 1

 

4)输出数据的格式控制

%d                                     整型  

%f                                      浮点型

%x,%#x,%X,%#X       int,long int

%c                                     char

%s                                      String(字符串)

%b                                     boolean

double和float都用%f来当输入输出控制符,c语言中double用%lf,float用%f。

 

5)数据类型转换

低精度向高精度转换可以,不会丢失精度。

        double p=(a+b+c)/2;   abc都是整型,不报错。int隐形转换为double,不会影响精度。

高精度不可以转换为低精度,因为丢失精度报错。比如:int p=6.6但是我非要,怎么办?

       比如:byte a=10;int b=6;a=(byte) b;即使用强制类型转化。

       注意只是把b的数据搞出一个相同的临时数据强制类型转化后赋给了a,b的值本身不变,仍然是int。

 

<4>常量

1)常量类型

整型常量:默认是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进行真假判断时候只能用逻辑表达式

 

2)Unicode编码

用于java中字符型数据的存储,类似c中的ASCII

Unicode编码是对ASCII编码的扩充,原来的ASCII编码没有重新定义,只是在前面加上了八个0,改成了Unicode编码的形式。

 

3)运算符

算数运算符+ - * / %

关于+:可以表示字符串的连接,比如:“123”+“abc”,结果是“123abc”

        可以表示非字符串转化为字符出啊,比如:“x”+123,结果是“x123”

        System.out.println(‘a’+1);//输出98     System.out.println(“”+‘a‘+‘1’);//输出a1  记住就行

关于%:被余数和余数可以有实数,c语言必须要求先后都为整数

位运算符:右移有两种:>>当作有符号数,最高位是什么补什么,>>>补0。左移类似

逻辑运算符(同c)

赋值运算符(同c)

 

<5>面向对象编程

1)  面向过程

自顶向下的设计模式

main()划分为几个subfunction(),sub又进一步划分为subsub

 

                      subFunction1()    subFunction2()   subFunction3() 

  

  subsubfunction1()   subsubfunction1()  

思想:将大问题转化为一个个的小问题,用函数来作为划分程序的基本单位,然后利用函数把这些小问题一一实现,以算法为核心。

缺点:

数据和操作分离,数据的安全性得不到保证。

        表现在任何操作都可以访问数据。

程序架构的依赖关系不合理。

        主函数依赖于各个sub函数,各个sub函数又依赖于更小的函数。程序能否运行取决于细节的实现,有一个细节错误,则整个程序不能运行。

对于需求不明确,变动较大,规模很大的问题,显得力不从心。

 

2)  面向对象

思想:自下而上的设计,先从问题的一部分来看,一点点地构建出整个程序,用类作为划分程序的基本单位。确定问题由哪些事物组成,先用类模拟出该些事物。

缺点:对于需求明确,变动较小,规模不大的问题,显得十分累赘。

 

3)  举例说明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是指针,指针在java中叫引用,存放的是生成的Triangle对象的地址。使用q.a,q.zhouchang()这种形式可以调用静态属性和可执行方法。

 

posted @ 2022-12-12 21:11  keyboardmancz  阅读(68)  评论(0)    收藏  举报