Java程序设计4.28 1-1到1-5

导学

基础知识,先学C语言,第一章会比较快速会把基础语法过一遍,对C语言语法进行复习

本章主要内容

  1. 面向对象程序设计
    2.基本数据类型与表达式
    3.数组
    4.算法的流程控制

1-1 面向对象的程序设计

简要介绍Java语言和面向对象的设计
Java是面向对象的高级语言
C是面向过程,Java是面向对象的设计语言

面向对象就是将客观事物看作具有状态和行为的对象通过抽象找出同一类对象的共同状态和行为,构成类
用程序来模拟这种思维,提高了软件的可重用性和可靠性

面向对象给软件发展带来的好处

可重用性
可靠性

基本特征

抽象封装
继承
多态

java的特点

1995 Sun
1996 JDK1.0
1998 JDK1.2 标准版 企业版 移动版
2004 JDK1.5
2006 JDK1.6

跨平台,不一样的高级语言

Java程序设计4.28 1-1到1-5_第1张图片
image.png

半解释半编译的语言,执行流程是
1.写.java
2.编译器将它编译成二进制.class
3.解释器在虚拟机上解释执行.class

Java程序设计4.28 1-1到1-5_第2张图片
image.png

练习题解析

  1. 下面有关JAVA代码安全性的叙述错误的是()
    字节码校验器加载查询执行所需的所有类 运行时由解释器执行代码 运行时,字节码被加载,验证,然后在解释器中执行 类加载器通过分离本机文件系统的类和从网络导入的类增加安全性
  2. 下面说法正确的是()
    JAVA程序的源文件名称与主类的名称相同,后缀可为.java或者.txt JDK的编译命令为java 一个JAVA源程序编译后,可能产生几个字节码文件 在DOS命令行下编译好字节码文件后,只需输入程序名即可运行该程序
  3. Java应用程序执行入口的main()方法返回类型是()
    int
    void
    boolean
    staic
  4. Java语言相比于C,C++的不同之处在于?
    (1) 不支持指针(2)可以手动进行内存管理(3)Java编译器生成的代码与平台相关(4)自动对内存进行管理(5)Java编译器生成的字节码,只要是安装了Java的运行系统其程序就能在不同的处理器上执行
  1. 某Java程序的类定义如下:
    public class MyClass{}

则该java源文件在存盘时其文件名应当为

myclass.java MyClass.java MYCLASS.java MyClass.class

  1. 设HelloWord的代码为:
    class HelloWord{

public void main(String a[]){

System.out.println("hello world");

}

}

下面说法正确的是:

A.HelloWord.java无法通过编译,因为main方法的声明方式不对
B. HelloWord.java可以通过编译,但是运行该程序会出现异常,不会打印HelloWorld C.HelloWord.java可以通过编译,但是无法运行,因为该文件没有public类 D.HelloWorld.java可以通过编译并正常运行,结果输出hello world

应当是B,这道题目其实是想考察在java中主函数main需要被声明为静态static的知识点,题目中的拼写错误和中文标点错误是助教的失误,现已修正了

1-2 基本数据类型与表达式

下面哪个是不合法的数据结构?

变量与常量
基本数据类型
运算符与表达式
类型转换

文字量

文字量直接出现在程序中并被编译器直接使用,文字量也称文字常量,即在其生存期内是值不可改变的量。

标识符

  1. 一个名称,与内存中的某个位置(地址)向对应。
  2. 标识符的第一个字母必须是:大写字母、小写字母、下划线、美元符号,其中之一。
  3. 标志服的第二个字符必须是上面任意字符,或者数字0-9

在高级语言当中并没有必要关注实际内存地址

变量

  1. 由标识符来表示、都有类型
  2. 变量的值可以被改变

常量

一旦初始化后就不能改变

基本数据类型

语言规范中,编译器能够直接识别的类型


Java程序设计4.28 1-1到1-5_第3张图片
image.png

Java程序设计4.28 1-1到1-5_第4张图片
image.png

字符型:数据

  1. 由单引号括起来的字符或转义序列
  2. 16位Unicode字符作为编码方式,例如:
    char var_char='a'
  3. Java程序设计4.28 1-1到1-5_第5张图片
    转义字符

布尔类型

表示真和假

字符串

但是在Java中没有内置字符串类型
表示字符串不能用字符数组
String是一个类,基础类库中定义好的类

  • 将string当做数据类型来用
    String animal="walrus";

字符串文字量

  • 由零个或多个字符组成,以双引号括起
  • 每一个字符都可以用转义序列来表示
  • 空字符串等等


    Java程序设计4.28 1-1到1-5_第6张图片
    image.png

运算符与表达式

  • 算术运算符

  • 赋值运算/复合赋值

  • 关系运算——布尔类型(算数或类型比较)


    Java程序设计4.28 1-1到1-5_第7张图片
    image.png
  • 相等关系运算(注意除了数字相等和布尔相等,还有引用相等的关系)

  • 逻辑运算符
    与或非(&& || !)

  • 条件运算符(表达式1?表达式2:表达式3)当1为真执行2,否则执行3

类型转换

每个表达式都有类型,如果语法不相符,编译器会尝试自动类型转换,转换失败编译器会报错

扩展转换

由低类型向高类型转换,这种转换有可能损失精度,整数到浮点,但是float到double就不会损坏
Java程序设计4.28 1-1到1-5_第8张图片
image.png

窄化转换

image.png

长数据转到短数据也会丢失

隐含转换

  • 赋值转换

  • 方法调用转换

  • 字符串转换
    java的特色:任何类型(包括null)都可转换为字符串,只当操作数是string类型时,适用+运算符的操作数

强制转换

  • 将表达式转换为指定的类型
  • 例如(float)5.0

练习题解析

  1. 以下哪些变量的声明是合法的:
    (1) try

(2) _try1231

(3) $Try_*

(4) 4_try

(5) #_try

(6) $try_1_for
第一个try是保留字,所以不合法
选(2)(6)

  1. Sytem.out.println(“1”+2)打印到屏幕的结果是:

1-3 数组

Java的数组跟C语言差别很大
在所有高级语言内都有,概念(熟悉)

数组的概念

由同一类型的对象或者基本数据组成,并风转载同一个标识符(数组名称)下。

  • 数组是对象
  1. 动态初始化
    其他语言:面向过程高级语言,数组一旦定义,数组就马上存在了
    Java:先定义数组的名字,或者叫引用,然后用动态的方式去分配内存空间,然后初始化的。
  1. 所有类顶上的超类是Object,在讲类的继承的时候回继续讲
  • 数组可以赋值给Object类型的变量
  • 可以调用Object类的所有方法
  • 每个数组都有一个由public final 修饰的成员变量:length,即数组含有元素的个数(length可以是正数或0)

数组元素

数组中的变量称为数组元素,元素没有名字,通过数组名字和非负整数下标值引用数组元素,

创建使用数组

  1. 声明数组名
  2. 构造数组
  3. 数组初始化
  4. 使用

引用在Java中,定义变量同时就分配内存空间以外,当我们要定义一个对象的时候,都是声明对象的引用,然后用动态内存分配的方式,得到这个对象的内存空间,并且给他初始化,然后把对象和这个引用名关联起来形成对象名
数组引用类似于C语言中数组首地址的指针,其实引用和指针是存在某种内在联系的,虽然在java中没有指针,但是处处有引用

引用声明

  • 不需要指明数组元素个数,也不为数组元素分配内存空间
    两种方括号的位置都可以


    Java程序设计4.28 1-1到1-5_第9张图片
    image.png

创建数组

  • 关键字new构成数组的创建表达式,可以指定数组类型和数组元素个数,个数可以是常量也可以是变量,如果变量已经指明值了,用变量来指定数组元素个数是没有问题的
  • 基本类型数组:每个元素都是基本类型的变量
  • 引用类型的数组:每个元素都是对象的引用
Java程序设计4.28 1-1到1-5_第10张图片
三种定义方法

初始化

到这一步,上面我们都没有给变量初始化,初始化变量是好的编程习惯。

Java的数据如果构造的时候,定义的时候不给它初始化,它里面不会有垃圾数据的。
基本类型、数值型,会自动初始化为0。引用类型会自动初始化为空引用

数组初始化

  • 声明数组名时,给出数组初始值,程序利用数组初始值创建数组并对各个元素初始化

  • 默认赋值

使用数组

  • 引用元素
    arrayName[index]
    数组下表必须是int,short,byte或者char

  • arryName.length得到数组长度

  • 元素的下标最大值length-1:如果下标越界了,会产生数组越界异常,Java比较安全

  • 数组名是一个引用,在赋值的时候是引用之间的赋值


    Java程序设计4.28 1-1到1-5_第11张图片
    image.png
  • 字符串引用构成的数组——每个元素都是引用


    Java程序设计4.28 1-1到1-5_第12张图片
    image.png
  • 复制数组或者数组的部分元素
    可用arraycopy的方法(第二章会介绍),可理解为函数,小功能模块作为类方法出现在类里面


    Java程序设计4.28 1-1到1-5_第13张图片
    一维数组

array copy方法

二维数组的声明构造

  • int[][] myArray;这里myArray是一个指向2维整数数组的引用,初始值null
    或者
  • int[][]myArray=new int[3][5];定义引用时,同时构造数组并初始化引用。这个数组所有元素的初始值为零。
  • int[][] myArray={{8,1,2,2,9},{1,9,4,0,3},{0,3,0,0,7}}; 定义引用,构造数组,初始化数组元素

(注意上面的三种不同处理方式,声明、构造、初始化既有一步到位,也有分开进行)

二维数组的长度

二维数组长度指的是行数

Java程序设计4.28 1-1到1-5_第14张图片
image.png

在这个示例程序当中刚开始直接打印二维数组的长度(行数),当然就是3,再分开打印每一行的长度(一位数组就是长度),当然就是3、2、5,所以有结论:


Java程序设计4.28 1-1到1-5_第15张图片
image.png

下一章

下一章介绍的流程控制和C语言基本相同

你可能感兴趣的:(Java程序设计4.28 1-1到1-5)