初学JAVA01
来源:互联网 发布:java 开源oa系统 编辑:程序博客网 时间:2024/05/18 00:02
初学JAVA
Java 特点: 1995年正式发布Java
1跨平台性、2简单性(较C++)、3纯面向对象 (4开源) ------------------------------------------------------ 1.简单性 舍弃了运算符重载、多继承等不常用的、难以理解的、容易混淆的成分 增加了自动垃圾搜集功能,用于回收不再使用的内存区域,大大减少了由于内存分配而引发的问题 另外,简单性还体现在小上。Java解释器、系统模块和运行模块都比较小,适合在小型机器上运行,也适合在网上下载 2.面向对象 面向对象编程是一项有关对象设计和对象接口定义的技术,或者说是一项如何定义程序模块才能使它们“即插即用”的技术。 Java继承了C++面向对象技术的核心,更具有动态解决问题的特性。 对象通过继承和重定义,成为解决新问题的棋块,使代码重用有了可能。 3.网络适用性 Java提供了大量的系统模块支持基于TCP/IP协议的编程,使得Java建立网络连接更容易 Java程序通过URL访问网络资源和存取本地文件系统一样简单。 4.健壮性 Java提供早期的编译检查和后期的动态(运行期)检查,大量消除了引发异常的条件. 5.安全性 Java可以组建病毒无法入侵和无法篡改的系统,其数字验证使用了基于公共密钥的技术。 安全性和健壮性密切相关 6.结构中立 任何安装了Java运行环境的计算机都能执行Java编译生成的目标代码(字节码)。 7.可移植性 结构中立构成了可移植性的基础 Java语言的基本数据类型采取固定长度,例如int型数据在任何计算机上都是32位长(4个字节) Java提供了可移植的接口 java本身也可以移植 8.解释型 Java是解释执行的。执行速度可以很快 9.高性能 字节码翻译执行很快 10.多线程 计算机同时运行多个程序段 Java提供了一套复杂的线程同步化机制,程序员可以方便的使用基于这种机制设计的方法,编写出健壮的多线程程序。 11.动态 Java是运行加载,类库可以自由添加方法和属性而不影响用户程序
Java运行机制:
编译 编译器:源文件 --> 机器码文件 (运行效率高)解释 解释器:源文件 --> 逐行翻译并运行 (可以跨平台)Java ———— 先编译 后解释 .java 源文件 --> .class 字节码文件 --> 在解释器中 解释运行JVM:Java虚拟机 屏蔽不同操作系统(OS)的差异JVM + 解释器 = JRE (Java运行环境)编译器+JRE+工具+类库 = JDK (Java开发工具包)
Java运行过程:
1、编译命令:javac 源文件名.java ———— 几个类编译后就会生成几个.class(文件名相对应)2、运行命令:java 类名(一个类的全名)(包名.类名)一个源文件可以定义多个类(class)一个源文件只能定义一个公开类(public class),公开类的类名必须和源文件名称完全相同
包:
package 包 ———— 写在程序第一句话 ———— 多个包用.隔开 如 package p1.p2.p3; java p1.Hello --> JVM会根据ClassPath(.)在当前目录下,找p1子目录,并在这个子目录中找Hello.classjavac –d 目标目录 源文件名.java 目标目录 --> 把生成的目录放在哪个目录下作为子目录。 javac -d . Hello.java ———— 生成的class自动放入包里(.指把包放入当前目录下)import 引入包,目的是避免重复写包名 —————— 书写在package之后 —— 让代码更简洁,可不写 *包里的所有类,但是不包括子包(即不能写.*.*)import java.lang.*; 系统默认添加 java.lang.String java.lang.System
基本结构:
package:0-1 import: 1-n class: 1-n 公开类 0-1
注释:
描述代码的文字 提高代码的可读性和可理解性 1. // 单行注释 (//往后) 写在代码的上部或后面 2. /* */ 多行注释 (里面允许嵌套单行注释,但不允许嵌套多行注释) 3./** */ 多行注释 配合JavaDoc工具使用 —— 写在需注释的前面 ———— 生成API文档
标识符_语法(必须):
1. 字母(中英文) 数字 _ $ 2. 数字不能开头 3. 大小写敏感 4. 不能使用关键字和保留字 package import class public true false 5. 没有长度限制标识符_习惯: 1. 望文生义 提高可读性 2. 大小写 包名:全小写 com.baizhi.day2; 类名:单词首字母大写 HelloWorld 变量/函数名:首单词小写,后面的单词首字母大写 printStar 常量名:全大写 COUNT //下划线常用于常量名的单词分隔
数据类型 变量
数据类型:对象类型:无穷,定义的类class; 简单类型(基本类型、原始类型):8种 整型: byte 1B -128 ~ 127 short 2B -32768 ~ 32767 int 4B -2147483648 ~ 2147483647 long 8B -2^63 ~ 2^63-1 字面值后加l或L 浮点型: 科学计数法 如 1.4e10=1.4*10^10 float 4B 单精度 必须字面值后加f或F double 8B 双精度 字面值后加d或D 字符型: char 2B 用法 'A' 65 '\u0041' --(\u后加16进制) unicode编码方式 如 'A'=65 char类型可以进行数学运算 char('A' + 'B')=131; 转义字符 '\t' 跳格tab '\n' 换行 '\'' 打印‘ '\“' 打印“ '\\' 打印\ boolean 布尔类型 字面值 true false java中boolean类型不能参与运算 String 字符串 字面值 "HelloWorld" 只能参与加法运算 如"a"+"b"="ab" "ab"+10="ab10" java 强类型 变量类型必须和数据类型一致 (int a=1.5 --> a=1) 定义变量:变量类型 变量名;
类型转换:(类型)表达式
自动类型转换 提升精度 强制类型转换 丢失精度 short i = short(int a) a + b 自动类型提升 若a和b中有double ==> double 若a和b中有float ==> float 若a和b中有long ==> long 默认 ==> int 只要有String ==> String
表达式
变量和字面值用某个运算符连接的式子 表达式必须有固定的值
运算符
+ - * / % = += -+ *= /= a+=3 不会类型提升 == a=a+3 会类型提升 %= a=4 a++ --> a=5 -->表达式=4 先赋值再+1 a=4 ++a --> a=5 -->表达式=5 先+1再赋值 == > < >= <= != &&逻辑与 ||逻辑或 !逻辑非 ——— 只能进行逻辑运算,短路性 比如判断&&前面为false后,直接进行最终判断 &按位求与 |按位求或 ^异或 ~求反(1变0,0变1) -- 前三个也可以参与逻辑运算 (1&1为1,其他都为0) ^ 相同为0,不同为1; ^ 参与逻辑运算时,同为真或假时,返回假,其他返回真 >> << >>> 移位运算符 10110>>1 --> 01011 右移一位除以2 10110<<1 --> 01100 左移一位乘以2 >> 算术右移 有符号的位移,保持符号不变 >>> 逻辑右移 负数位移完变正数 ?: 三元操作符 如:(a>b)?3:2 ——> 判断a>b,true-->3,false-->2
局部变量 在函数内部定义的变量
1.先赋值,后使用 2.作用范围:从定义开始,到它的代码块结束 //{}:一个代码块 3.在作用范围内,不允许两个局部变量发生命名冲突
读入数据
读入数据的类: java.util.Scanner 代码: java.util.Scanner sc = new java.util.Scanner(System.in); //创建了一个 Scanner 对象,,为读入数据做准备 int n = sc.nextInt(); //读入一个整数 String str = sc.nextLine(); //读入一行字符串 double d = sc.nextDouble(); //读入浮点数 /*通过sc的相关函数 从控制台获取数据 next() 获取字符串 遇到空格或者回车结束 nextLine() 获取字符串 遇到回车结束 nextInt() 获取一个int类型的数据 nextDouble() 获取一个double类型的数据 nextBoolean() 获取一个boolean类型的数据 next().charAt(0) 获取一个字符 */
流程控制
顺序执行流程 条件分支流程 if(){} if(){} else{} if(){} else if(){} else{} switch(i){ case 1: ;break; //case后面的常量必须是整数或字符型 case 2: ;break; //case后面的常量不能有相同的值 case 3: ;break; //case后面通常使用break,提供一个出口,否则会落空 …… default: ; —— 前5个case都不能匹配的时候,执行default。 } switch(i) —— i:只允许整型表达式 byte short int char 后续版本已支持 String case后只能跟数字,不能跟范围 循环流程 while(布尔表达式){} 会执行0~n次 do{} while(布尔表达式); 会执行1~n次 for(①赋值;②⑤⑧条件;④⑦语句){③⑥} 会执行0~n次 条件为空时,默认true; for( ; ; )里面都可为空 确定循环次数时适合用for循环 break; 跳出循环 continue; 跳出本次循环/继续下一次循环 双重循环 循环的嵌套
函数(方法):
可以重复被使用的一段代码 定义位置:类中,其他函数的外部 一个类中,多个函数的顺序是无关紧要的 声明: public static 返回值类型 函数名(形参列表) 返回值:表示调用函数之后,函数会返回什么数据给调用者;(8种基本类型+对象类型) 形式参数(形参):相当于函数内部有效的局部变量 ———— 多个形参用“,”隔开 如(int a,int b) void 表示没有返回值 实现:{代码} 必须和声明一致(主要指返回值类型) return; return 语句表示返回一个值 还能够控制流程的跳转(结束函数) 调用函数: 函数名(实参列表); 实参会依次给形参赋值,,实参(表达式,字面值,变量) 调用函数,程序流程会进入函数,函数返回,程序流程会返回到函数调用点 函数的作用: 1.避免冗余代码 2.提高程序的可维护性 3.提高程序的重用性 4.提高程序的灵活性 函数的嵌套和递归 递归:函数自己调用自己 不是必须用 把一个大问题化解成小问题
编程思想:
面向过程的编程:(自顶向下,逐步求精) 从程序执行的过程入手,将完整的过程细化成多个子过程,再将子过程细化,直到完成代码 非结构化: goto 结构化: 函数
一维数组:一个线性数据序列 (数组是有序元素的集合)
一次性定义多个同类型的变量 int[] a; 数组空间在内存中必定是连续的 数组元素有默认值 数值类型数组 默认值:0/0.0 boolean类型数组 默认值:false 对象类型数组 默认值:null int[] a = {1,2,3}; 数组的显式初始化 || int[] a = new int[] {1,2,3}; 数组的显式初始化 || int[] a; 数组的定义声明 a=new int[3]; 初始化长度 a[0]=1; 数组中变量的赋值 a[1]=2; a[2]=3; for(int i = 0;i<a.length;i++){ //遍历数组:把数组中的元素从头到尾访问一遍 System.out.println(a[i]); } 数组的长度: 数组名.length 数组长度是固定的,如果需要扩充,必须创建新数组,原数组的元素要复制到新数组 数组的扩充1:int[] a={1,2,3,4}; int[] b=new int[a.length*2]; for(int i=0;i<a.length;i++){ b[i]=a[i];} a=b; //让a这个变量自此指向b地址,即把b指向的首地址赋值给a 数组的扩充2:int[] a={1,2,3,4}; int[] b=new int[a.length*2]; System.arraycopy(a,0,b,0,a.length); //System.arraycopy(原数组,起始下标,目标数组,起始下标,数量) a=b; 数组的扩充3:int[] a={1,2,3,4}; a=java.util.Arrays.copyOf(a,a.length*2);
二维数组:(机器识别为:一维数组的嵌套)
int[][] a = new int[4][3]; 4行3列 for(int i=0;i<a.length;i++){ //遍历数组 for(int j=0;j<a[i].length;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } 不规则数组: int[][] a = new int[4][] //先为数组指定高维长度,再分别指定低维长度。但是反过来是错误的。 a[0]=new int[3]; a[1]=new int[5]; a[2]=new int[2]; a[3]=new int[6]; int[][] a = {{1,2,3},{4,5,6},{7,8,9},{0,0,0}}; 二维数组的显式初始化
数组的排序:(归纳法)
冒泡排序法:两个相邻的元素相比较 int[] a={4,2,7,6,9,1,5}; int n = a.length; for(int i=1;i<n;i++){ //外循环 for(int j=0;j<(n-i);j++){ //内循环 if(a[j]>a[j+1]){ //相邻两个,前面数值较大时 int t = a[j]; //交换a[j]和a[j+1]的位置 a[j] = a[j+1]; a[j+1] = t; } } }
选择排序法:选择一个元素后和其余元素相比较
//第一种:
int[] a={4,2,7,6,9,1,5}; int n = a.length; for(int i=0;i<(n-1);i++){ //外循环 for(int j=i+1;j<n;j++){ //内循环 if(a[i]>a[j]){ //选择的元素与其余元素比较时,前面数值较大时 int t = a[i]; //交换a[i]和a[j]的位置 a[i] = a[j]; a[j] = t; } } } **//第二种:** int[] a={4,2,7,6,9,1,5}; for(int i = 0;i<a.length-1;i++){ int min = i; //min保存遍历范围内的最小值的下标 for(int j = i;j<a.length;j++){ if(a[min]>a[j]){ min = j; } } //a[i] <==> a[min]; int temp = a[i]; a[i] = a[min]; a[min] = temp; } **快速排序法:** java.util.Arrays.sort();
快捷键
加粗
Ctrl + B
斜体
Ctrl + I
引用
Ctrl + Q
插入链接
Ctrl + L
插入代码
Ctrl + K
插入图片
Ctrl + G
提升标题
Ctrl + H
有序列表
Ctrl + O
无序列表
Ctrl + U
横线
Ctrl + R
撤销
Ctrl + Z
重做
Ctrl + Y
阅读全文
0 0
- 初学JAVA01
- JAVA01
- Java01
- 学习java01
- java01.基础知识
- Learn Java01
- Java01 What is java
- [java01]Java基本数据类型
- java01基础简介
- code hunt JAVA01
- [Java01]实现文件重命名
- Java01-"Hello World!"
- 在北京黑马学习Java01
- Android学习笔记之java01
- 初学...
- 初学
- 初学
- 初学
- 1.2_配置Python基本环境
- 几种任务调度的 Java 实现方法与比较
- javaWeb 项目SSM配置要点及可能遇到的问题解决方法
- java:获取异常的堆栈信息
- 【笔记】 搜索
- 初学JAVA01
- 记录平台改造中的问题及解决方法
- 动态/静态语言及强类型/弱类型语言简析
- 关于 cvx & spams 的两个版本的安装、测试
- DIV+CSS(网页遮罩效果)
- jquery下载地址:https://code.jquery.com/jquery/ 影响范围: 版本低于1.7的jQuery过滤用户输入数据所使用的正则表达式存在缺陷,可能导致LOCA
- SQLLDR 简介
- newInstance()和new()的区别
- 【队内练习赛】OMG爱吃鸡 【dp递推】【思维题】【好题】