Java学习

94 阅读10分钟

一:java介绍

1.java的特点

简单易学

  • 相当于是c语言的变种,所以大部分语法规则还是与c相近
  • 摈弃了c语言较难的一部分,如指针和内存管理
  • 提供了丰富的类库
  • java是完全面向对象的语言,而c++是面向对象和面向过程的中间体,c是纯面向过程

安全性高

  • 如语法严格性,如int i=1.11;这样是不允许的,因为可能会造成数据丢失。
  • 如摈弃了c语言中较危险的指针和内存管理问题。这样就不会直接对硬件操作,也就不会有问题了
  • 内存管理,java会自动清除堆中内存,而c语言需手动free()。

跨平台使用

  • 用户实现用代码控制电脑之间的逻辑关系 image.png
  • 跨平台到底什么意思 跨平台指的是源程序编译后的文件可以在不同电脑的不同操作系统下使用,而不同的操作系统会有只能识别特定文件,不能识别其他文件。c语言跨平台能力弱,而java可以跨遍不同平台
  • java的跨平台原理 java源程序通过编译后得到了字节码程序,然后利用不同的操作系统下的特定的虚拟机(这个虚拟机是适合这个所在的操作系统的),将字节码转换成该操作系统下能够识别的机器语言。 image.png

2.C和java的对比

理解c语言代码操作过程

c语言经过编译之后形成可执行文件.exe,这个执行文件是操作系统可以“看懂的”然后经过操作系统将其转化为指令,然后给cpu解读,然后再把执行结果返回给操作系统,然后在执行软件方面操作。 所以不同的操作系统可能对文件处理方式不一样

C语言和java语言的操作运行区别

image.png

java虚拟机解释

不同的电脑下载的java虚拟机肯定是不同的,设计他的人肯定知道不同的java虚拟机为不同的操作系统和硬件所量身定做的。但不同的java虚拟机可以编译通用的编程语言,这就是设计java虚拟机的灵魂所在。导致了java可跨平台 image.png

3.其他的一些解释

为什么不给c语言也加一层虚拟机呢

    1.速度问题。加了一层虚拟机从代码编译后到操作硬件底层的速度会变慢,也就是得到结果
    会变慢
    2.设计问题。我们设计c语言就是让它能够快速操作硬件且易编写而设计的。而java就是让其
    具备跨平台功能,方便移植

粗略解释为什么大部分软件现在都用java写了

    1.java跨平台,可移植性强,这就导致了软件可以在不同的操作系统下运行,然后给cpu计算,
    得出操作和结果
    2.java面向对象,c语言面向过程,C语言逻辑性强,写软件没有java容易

二:面向过程和面向对象理解和区别

面向过程

优点:
    1、分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。
    2、以算法为核心,
    3、自顶向下设计,要求一开始必须对问题有很深的了解
    4、将大问题转化为若干小问题来求解
    5、表现形式:用函数来作为划分程序的基本单位
    6、直接面向问题

缺点:
    数据和操作分离开,对数据与操作的修改变得很困难;数据的安全性得不到
    保证,程序架构的依赖关系不合理。

面向过程

其设计思想是,一个问题有哪几部分问题或事物组成,然后有类来模拟这些事物,把这些事物所有可能的操作全部包含在这个类中。这是一种自底向上的设计思想 image.png 1.类和对象和过程比较 2.c语言中结构体和类区别 3.使用类和使用结构体区别

  • 局部变量和成员变量(属性)的区别

三:标识符和数据类型

1.标识符

字母,下划线(_),美元符($)开头的一个字符序列,
后面可以跟字母,下划线,美元符,数字

2.数据类型

数值型

  • 常量 #整型常量
    image.png #浮点常量
    image.png #字符常量
    Java中字符和字符串都用Unicode编码表示
    区别点:在于其char占2个字节
    #布尔类型
    用boolean表示,不能写成bool;布尔型数据只有两个值truefalse,且他们不对应于任何整数值。参与逻辑表达式的计算结果。

引用型

类,接口,数组

所对应的输出控制符其他的一些区别

输出数据格式

与c语言不同的是

%d(int, long int, short, byte)
%f(float,double)
%c(char)

数据类型的转换

    1.容量大的到容量小的,必须使用强制类型转换。要不然报错
    2.容量小的到容量大的,会自动转化

占的字节个数

image.png

运算符

加法

image.png

位运算符(需要用到补码知识)

image.png image.png

类和对象的理解

1.类

解释:

把一类事物静态属性和动态可以执行的操作组合在一起所得的这个概念就是类,类是抽象的,用来模拟一类事物,是一个概念,一旦定义了,类的概念就永远存在

使用说明

  • 里面的内容

      * 组成
      1.属性(静态属性)+方法(构造方法和方法)(动态操作)
      
      * 说明
      1.只能定义属性(可同步初始化),但无法再进行赋值等其他操作
      (想想结构体不也不行么)
      2.可以在方法内部进行对同类属性操作
      (想想函数当然可以)
    
  • 与c语言相比较 1.可以将类类似于c语言中的结构体,所不同的是 类包含了这个事物的静态属性和动态操作(方法),而c语言结构体是只包含了一个事物的静态属性,而动态操作是通过外部函数来实现
    所以类只是模拟,定义了类,物理上没有为其分配内存(这与c语言是一样的),只有定义了其对象时,这时里面的东西就是确实存在了,在堆中分配了内存

类里其实就是属性+方法(\函数),而c语言把属性(结构体)和函数分隔开了,这也就是面向对象,面向过程的一种体现

2.对象

解释:

对象是类的一个个体,具体的实实在在存在的事物,当定义了对象时,物理上会在堆内为其所指的类分配内存(内存大小是其类中的属性和方法所占的空间大小之和),也会在栈内为对象分配内存(内存大小是固定值,一般4字节)
这其实会发现和c语言指针与结构体非常相似了

格式:

  • 格式 类名 +变量名=new + 类名(形参...)(也就是构造方法);

  • 调用类中的属性和方法 1.变量名.属性/方法(前提是无private)
    2.类名.属性/方法(前提是该属性和方法均要为static和无private)

注意事项:

1.一个项目中只能有一个公共的类,且其类名必须与文件名一致,
  也称这个类叫主类
2.特殊的,还有个超类问题

主类的解释:

  • 含义:主类的标志是包含main的类,其整个代码都是从这个类中的main进,main出,

  • 注意:

      1.当主类没有定义成公共的时候,其类名可以与文件名不一致\
      2.当主类定义成公共的时候,其类名必须与文件名一致\
      
      main的格式固定 public static void main(String[] args)
    

image.png

其他类的解释:

  • 含义:描述一个事物的静态属性和动态可以执行的操作组合在一起所得到的

  • 与主类的关系:是并列的关系

  • 一个类中包含若干属性和若干方法和一个构造函数 image.png

  • 注意:

      1.类名前面不能加任何访问控制符
      2.格式固定class +名
      3.
    

与c语言的一些类比:

* 格式类比
A aa=new A();//在堆内为A分配内存
struct A * aa= (struct A *)malloc(sizeof(struct A))//也是在堆内分配内存
你会发现struct A * 缩成了A,替换了指针的概念,所以java虽说无指针,但
是逻辑思想还是没有改变

* 调用类比
java: aa.属性;
c语言:aa->属性或*aa.属性

***总结而言:java在语法上与c语言相似很大,
而解决问题的思维逻辑两者是从不同的角度出发的,这样对不同的问题就有各自的优势

对象

image.png

image.png

image.png

堆和栈的本质

即本质都是内存条里的一块区域,而不同的是编译器模拟两者的区域的时候,栈的区域内存会被释放掉,而堆中内存不会

解释

image.png

image.png

访问控制符

image.png

image.png

image.png

下面表明, 1.public就是一个访问控制符
2.不存在什么主类,在一个工程中,所有类的地位是并列的
3.main可能表明了一开始运行的时候是从main进入,从main出,而在main中可以调用其他类 image.png

函数重载

构造函数

  • 格式注意 1.“函数名”与类名需一致
    2.无返回值
    注意:

      1.构造函数里可以是任何符合语法规则的内容和非私有的外部属性和方法
      2.当构造一个其类的对象的时候,会自动运行构造函数里的内容\
      3.一个类中一定有构造函数(方法),当你不写的时候是默认public A()
          所以这就是当是默认时为什么有定义对象是 A aa=new A();
    

函数重载

image.png

this含义

static啊含义

image.png

image.png

敲代码部分

1.访问控制符使用,类和对象

image.png

image.png

image.png

image.png

继承:

  • 介绍:

image.png

  • 注意: image.png
  • 关系

image.png

包含关系,范围关系,使用关系

image.png

image.png * 1.从父类继承的属性和方法,也就表明了子类一定里面存在这些继承来的东西(非私有的) 当定义一个子类对象时,分配堆的时候,自然会为这些继承来的分配空间。 2.例子表明可以用过继承,将父类static 的属性也给继承,则就可以用 子类名.(父类的static)属性 image.png

  • super使用
  • 格式:
  • 实际含义: 1.super 就像一个指针一样,指向父类,只要有super的地方,必是对父类的属性或方法进行操作,然后继承到子类来
  • 注意事项: 子类构造函数中的注意: 1.super只能写一个

子类其他位置的注意

image.png

image.png

  • 方法重写

image.png

  • 如何使用或获取其他类中的私有属性和方法 1.调用其他类中共有的方法,这个公有的方法包含对私有属性的操作

image.png

  • 注意事项

image.png