关于程序,我截取了之前看过的一本书里的内容,罗列在下面。个人觉得是一本讲得很清晰的书哟:《Think Python》
不同编程语言中,程序的具体细节也不一样,但是有一些基本的指令几乎出现在每种语言当中:
输入(input):从键盘、文件、网络或者其他设备获取数据
输出(output):在屏幕上显示数据,将数据保存至文件,通过网络传送数据,等等
数学(math):执行基本的数学运算,如加法和乘法
有条件执行(conditional execution):检查符合某个条件后,执行相应的代码
重复(repetition):重复执行某个动作,通常会有一些变化
无论你是否相信,这几乎是程序的全部指令了。每个你曾经用过的程序,无论多么复杂,都是由跟这些差不多的指令构成的。因此,你可以认为编程就是将庞大、复杂的任务分解为越来越小的子任务,直到这些子任务简单到可以用这其中的一个基本指令执行。
【java源文件组成】
java是面向对象的语言,因此从总体上来说,关于java源文件可以分为两部分:由关键字class所定义的类 与 一系列用于解释说明/便于后期调试所书写的注释信息。
1. 类
-
基本组成部分是类,可以书写对应文档注释;
- 可以声明多个类,但只能有一个public型的(java语言的封装性);
- public型的类的名与源文件名保持一致;
-
书写格式:
[选项] class name{
xxxx
xxxx
}
-
含有几个类,编译后会生成几个
类名.class
文件; -
命令行解析.class文件时是单独解析,其运行入口是
public static void main(String[] args)
,所以要解析的.class类中必须要含有main方法; -
use 类:
类 去extends 类>>子类;
在源文件开始部分 要import 含类的jar包(子jar包):
1.声明一个该类 类型的field;
2.将该类作为参数传入写的Method/Constructor中;
3.写的某Method中可以return该类;
-
use 接口:
类 去implements 接口(因为接口表述的是动作);
接口 去extends 接口(省去多余的动作陈述) ;
2. 文档注释
-
书写格式:
/**
@author XXX
@version XXX
*/
-
类似
// xxx
和/* xxx */
文档注释信息也不会被编译到字节码文件里,不同的是,文档注释可以被jdk工具javadoc
解析 >>> 以网页文件形式体现;书写举例:
javadoc -d 新建文件夹名 -author -version 源文件名.java
-
一般可以对整个类或整个方法前使用文档注释;
-
javadoc解析的类一般为public型;
3. 应用程序 = 算法 + 数据结构
-
数据结构:数据在内存中的存放形式
影响了程序执行后的效率;
-
算法:“运算方法”,对数据 进行操作(运算、排列、输入输出、重复…) 所需要的逻辑,是一系列解决问题的清晰指令
影响了程序执行后结果的正确与否;
4. 关键字
-
被java语言赋予了特殊含义的单词(小写字母组合);
-
可以用于识别程序结构(标志着xxxx):
1.数据类型
2.流程控制
3.标志修饰符:访问权限修饰符(ppp)、类/接口/方法/变量修饰符(afss)
4.继承关系
5.实例
6.异常处理
7.包的使用
8.特殊的字面值:
true、false、null
9.其它
-
关键字中所有字母都为小写;
-
保留字:
goto、const
;
5. 标识符
java 所有的组成部分都需要名字;类名、接口名、变量名、方法名都被称为标识符;
-
关于标识符,java语言也有自己的命名规则
涉及了语法,不遵守,编译不通过;
由26个英文字母大小写,0-9 ,_或 $ 组成;
数字不可以开头;
不可以使用关键字和保留字;
java中严格区分大小写,长度无限制;
标识符不能包含空格; -
java开发过程中,常常要遵守一些命名规范
提高了开发效率;
1.包名:多单词组成时所有字母都小写
xxxyyyzzz
;
2.类名/接口名:多单词组成时所有单词的首字母大写:XxxYyyZzz
;
3.变量名/方法名:多单词组成时第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
;
4.常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ
;
【java程序内容之变量】
编程语言最强大的特性之一,是操作变量的能力,如:新建(声明)变量、为变量赋值、改变变量的值、对变量运算。
1. 含义
-
变量是程序中基本的数据存储单元(在编程语言中,变量指代我们在计算机中常提到的数据);对应内存空间中一个存储区域;在java语言中,数据类型有两类:
1.基本数据: 都有相应的值(可以化成十进制、二进制等);有的是通过字符编码集(char)或特定结构表示(如float/double)来转换的;可以直接存储到内存中 >>基本数据类型变量;
2.引用数据:对一些数据进行的结构上逻辑上的重新组织(暂时理解>> class/array/interface…);其中重要的是它们的首地址值;首地址值将存储到内存中 >>引用数据类型变量(简称 引用/引用变量);
对象引用:指向了对象的引用;
-
包含 数据类型、变量名、存储的值(引用数据类型里,存储的类/接口/数组的值指的是它们的首地址值):
可以
int a = 127,b = 127;
//共同使用int关键字
不可以int a = b = 127;
可以int i2,j2; >> i2 = j2 = 10;
//连续赋值
不可以System.out.println(int e = a + b);
-
java中每个变量在使用前必须先声明;特别的,常量如果不声明直接使用数值默认int/double型;
-
程序运行时,变量指向了内存空间中存储的某些数据(一般是某个值,也或者是一片引用类型数据);
-
常量:在程序执行过程中,始终不会变值的量称为常量,通常也称为
final 变量
,只能被赋值一次;
2. 命名规范
3. 变量类型(按数据类型分类)
- 8(4211)个 基本数据类型:42(数值)1(字符)1(布尔);
- 3(111)个 引用数据类型:1(类)1(接口)1(数组);
- 注意字符串类型
String
是 引用数据类型中的class(类) 类型,String 不是关键字;
【数值型】
-
float/double 类型在内存中的存放格式:
xxxxxxxxxxxxx
-
定义数值类型的数据时,通常使用
int(4bytes); double(8bytes)
型;常量也默认是int(4bytes); double(8bytes)
型; -
定义 long 型变量时,值后必须以
l
或L
结尾; -
定义 float 型变量时,值后要以字母
f
或F
结尾; -
float 可表示的数值的范围比 long 还大;
-
float 单精度,尾数可以精确到7位;
-
数值形式(书写/编码/存储)
1.整数型的数值直接书写形式是十进制数形式,是java编程时对开发者来说最方便直接的数值形式;
2.浮点型数值的直接书写形式可以采用十进制数形式如5.12、512.0f,也可以使用科学计数法形式:52e3、2.1E-2;
3.如需其他进制进行书写,要加上助记符:0b/0B、0、0x/0X;
4.char型也有它对应的十进制数值 <<< java采用了Unicode编码;
5.所有数据(对应变量)在计算机内存/cpu寄存器中都是二进制形式存储,
所以在后续对变量操作时,应该与内存中的数据存放形式对应起来
<<< 所有数值在计算机底层都是以二进制补码形式表示和存储的;6.原码:我们开发人员直接面对的十进制数所化成的二进制数;
【字符型char】
'x'
必须有且只能有1个字符(char型) ----- 2 bytes;- 转义字符:换行符
'\n'
制表符'\t'
等; '\\n'
中第一个'\'
作用:抵消掉后面的特殊意义,如'\"'输出 "
、'\\n'输出 \n
…- 直接使用 Unicode 值来表示字符型常量:’\uXXXX’,XXXX代表一个十六进制整数;如:’\n’ == ‘\u000a’???;
- char型数据有它对应的十进制数值 <<< java采用了Unicode 编码;
char c1 = 'a';
char c2 = 97; //开发中这样初始化赋值写法比较少见
【基本数据类型转换】
-
自动类型提升:byte 、char 、short --> int --> long --> float --> double ;
-
特别的,当 byte、char、short 三种类型的变量做运算(自身/相互)时,结果为 int 型!!;
byte f = 127;
byte g = (byte)(f + 1);
System.out.println(g); `// -128` 自动类型升级后强制类型转换>>数据截断
byte g1 = (byte)126 + (byte)1; `// 127` 126+1在范围内
//byte g1 = (byte)127 + (byte)127; `//fail` 超出了范围
byte f1 = 125;
//byte g2 = f1 + (byte)1; `// fail` 即使125+1在范围内
char c1 = 'a';
byte g2 = (byte)128;
System.out.println(g2); `//-128` 强转>>数据截断
byte g3 = (byte)126 + (byte)2; `//fail`
-
强制类型转换符:( )
1.强制类型转换,可能导致精度损失;
double doub1 = 12.9;
int inte1 = (int)doub1; //截断操作2.可以低级到高级,保存int型之间的完整相除结果:
double a = 12 / 5;
double b =(double)12
/ 5;
System.out.println(a); //2.0
System.out.println(b); //2.4
【布尔型boolean】
-
两个字面值(特殊关键字):
true false
; -
常在条件判断、循环结构中使用;
-
编译时将ture/false转化成1/0(int数据类型),书写时不可以自行替代;
-
不能与其他数据类型运算或转换!!
【字符串String】
-
不能靠
(String)xxx
将其他类型的变量转换成String型://String a = (String)125; //System.out.println(a); //编译出错
-
声明String类型变量时,使用一对
"xxx"
,xxx可以为空即""
; -
String可以和8种(含 boolean)基本数据类型变量做运算,且运算只能是连接运算:
+
;运算的结果仍然是String类型; -
可以通过基本类型对应的包装类中的方法进行String到其他类型的转换:
String str1 = 123 + ""; // "123" int num1 = Integer.parseInt(str1); System.out.println(num1); // 123