首页 > 编程语言 >java学习笔记--java介绍,一些基本知识,面向对象的理解

java学习笔记--java介绍,一些基本知识,面向对象的理解

时间:2022-12-12 21:23:25浏览次数:47  
标签:exe java 字节 pc -- 基本知识 int 执行

<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

相关文章

  • python-miio 入门
    一、获取ip和tooken转载链接:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor二、基础通信转载链接:https://github.com/rytilahti/python-miio/iss......
  • 第九关 如何实现简单的风控想法?
     针对单次交易指的是,如果净值因为这一笔交易而损失到了一定程度,则不必等到相应的择时点出现,直接清空仓位止住损失。而针对标的的风控,一般是因为某个标的出现了突发事件,......
  • Median
    Medianhttp://poj.org/problem?id=3579 思路参考:https://www.cnblogs.com/sky-stars/p/11317030.html lower_boundhttp://c.biancheng.net/view/7521.html ......
  • Unity中实现A*寻路
    前言:最近没事儿没工作,计划每天写一篇博客,防止对Unity生疏,也可以记录学习的点点滴滴。A*寻路在很多面试里都会问到,但实际工作中根本用不着自己写,网上有成熟的插件,不容易错......
  • 可视化界面之数据增删改查、django请求生命周期流程图、django路由层、反向解析
    可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看'''for......
  • 水果:柑橘柚类
    整理一些柑橘(柚)类水果。 目录0、序章1.1、食用禁忌1、沃柑2、不知火(丑橘)3、脐橙4、冰糖橙5、椪柑[pènggān]6、蜜桔7、沙糖桔8、沙田柚 注,内容主要来......
  • VSCode GDB调试配置
    VSCodeGDB调试配置1.vscode启动debug窗口按Ctrl+Shift+D,打开Debug窗口默认是“Noconfigurations”,点击“F5”,会提示你配置GDB参数(选择gccbuildanddebugactive......
  • 直接插入排序
    排序是非常常见且常用的算法,这次的排序算法是直接插入排序见例题如下:本题要求实现直接插入排序函数,待排序列的长度1<=n<=1000。函数接口定义:voidInsertSort(SqListL......
  • Django3
    django请求生命周期流程图1.Django请求的生命周期的含义Django请求的生命周期是指:当用户在浏览器上输入URL到用户看到网页的这个时间段内,Django后台所发生的事情。2.Dj......
  • 王不留,要做什么?
    文/王不留(微信公众号:王不留)1.清明节后的这几天,生活颇不平静。工作已让人焦头烂额,公众号又遭大量投诉而删文,让我不胜其烦。于是,4月6号晚上,我把三个公众号上发表的内容全删......