第1章
1、java特性
简单性,java语法是一个C++语法的纯净版本。
面向对象,java将重点放在数据和对象的接口上。java与C++的主要不同点在于多继承,在java中实现多继承的机制是采用接口以及元类模型。
网络技能,健壮性,安全性,体系结构中立,
可移植性,java的基本类型的大小以及有关算法都做了明确的规定,java规范没有依赖具体实现。例如:java中的int类型永远是32位的整数,在其他语言中就不一定。其他语言只有一种规定就是int类型的大小不能低于shortint,不能高于long int。java中的字符串使用标准的Unicode格式存储。
解释性,高性能,多线程,动态性。
2、java发展史
java以C++为基础。
java版本发展过程
版本 年份 语言新特性 类与接口的数量
1.0 1996 语言本身 211
1.1 1997 内部类 477
1.2 1998 无 1524
1.3 2000 无 1840
1.4 2004 断言 2723
5.0 2004 泛型 for each 可变元参数 自动打包 元数据 枚举 静态导入 3279
6 2006 无 3777
第3章:基本程序设计结构
1.简单的应用程序
1 public class FirstSample 2 { 3 public static vod main(String[] args) 4 { 5 System.out.println("Hello World!") 6 } 7 }
类名大写字母开头,若名字由多个单词构成,每个单词第一个字母都要大写;
源代码电网文件名必须与公共类的类名相同,并用java做拓展名;
java虚拟机从指定类的main方法开始执行;
main方法必须声明为public,必须是静态的;
2.注释
行注释: //
段注释: /* */
生成文档: /** **/
3.数据类型
java是强类型语言,即必须为每一个变量声明一种类型;
java一共有8种基本类型:4种整型 2 种浮点型 1种字符类型char 1种bool类型;
java中所有数值类型所占用的字节数与平台无关;
4.变量
声明一个变量后,必须用赋值语句对变量进行显式初始化;
可以将声明放在代码中的任意位置;
利用关键字final指示常量, static final指示类常量,const是java保留字但并未使用;
5.运算符
6.字符串
String类包含在java.lang包中,这个包会在Java启动的时候自动import,所以可以当做一个内置类(built-in class),不需要显式的使用import引入String类;
String类是唯一一个不需要new关键字来创建对象的类;
java没有内置的字符串类型,而是在标准java类库中提供预定义类String,即每个字符串都是String类的一个实例;
不能修改字符串中的字符;
不能使用==运算符检测两个字符串是否相等,只能确定是否在一个位置上,只有字符串常量是共享的,而+或substring等操作生成的并不是共享的;
检查空串: if(str.length == 0) 或 if (str.equals("")) , 检测nil串: if(str == null)
1 import java.util.Arrays; 2 class StringDemo 3 { 4 public static void main(String [] args) 5 { 6 String name1="hello world"; 7 String name2="hello world"; 8 String name3=new String("hello world"); 9 String name4=new String("hello world"); 10 System.out.println( name1==name2 );//true 11 System.out.println( name3==name4 );//false 12 13 System.out.println("字符串的查找----------------------------------------"); 14 15 System.out.println("字符串的使用!String"); 16 System.out.println(name1.length()+":字符串的长度"); 17 System.out.println(name1.charAt(3)+":返回指定下标的字符"); 18 System.out.println(name1.indexOf('o')+":通过字符找到字符的下标"); 19 System.out.println(name1.lastIndexOf('o')+":返回最后一个字符的下标"); 20 21 22 System.out.println("字符串的判断-----------------------------------"); 23 24 String s=""; 25 System.out.println(s.isEmpty());//true 长度为0返回true 否则返回false 26 String fileName="Demo1.java"; 27 System.out.println(fileName.endsWith(".java"));//判断某个是否已某个字符串结尾 28 System.out.println(fileName.contains("java"));//判断是否包含某个字符串 29 System.out.println(fileName.equals("java"));//false 30 System.out.println("java".equals("java"));//true 31 System.out.println("java".equalsIgnoreCase("JaVa"));//true忽略大小写比较 32 33 34 System.out.println("字符串转换---------------------------------------"); 35 String str=new String(new char[]{'a','b','c','d','e'}); 36 System.out.println(str); 37 38 char[] charArr=str.toCharArray();//字符串装换成字符数组 39 System.out.println(Arrays.toString(charArr)); 40 41 String strBy=new String(new byte[]{97,98,99}); 42 System.out.println(strBy); 43 byte [] byteArr=strBy.getBytes(); 44 System.out.println(Arrays.toString(byteArr));//字符串转换成byte数组 45 46 System.out.println("字符串替换---------------------------------------"); 47 48 String strRe="hello world !"; 49 System.out.println(strRe.replace("world","java"));//都会重新创建一个对象,原来的 对象不会改变 50 51 System.out.println("字符串切割---------------------------------------"); 52 String strSpl="hello world !"; 53 String[] strArraySpl=strSpl.split(" "); 54 System.out.println(Arrays.toString(strArraySpl)); 55 56 System.out.println("字符串子串------------------按照指定顺序求字符串的一部分---------------------"); 57 String strSub="hello world !"; 58 System.out.println(strSub.substring(3));//也是产生新的字符串 59 System.out.println(strSub.substring(3,9));//假如超过了字符串的长度,那么用"空"表示 60 //System.out.println(strSub.subString(6,4))//运行时报错可以大于等于前面一个下标 61 62 System.out.println("字符串大小转换---------------------------------------"); 63 String strUp="HELLO world"; 64 System.out.println(strUp.toUpperCase()); 65 System.out.println(strUp.toLowerCase()); 66 67 System.out.println("字符串去除两边空格---------------------------------------"); 68 String strTr=" hello world ! "; 69 System.out.println(strTr.trim()); 70 71 //trim的实现 数组里面的length是属性不是方法 72 String strTrm=" hello world ! "; 73 char[] charTr=strTrm.toCharArray(); 74 int start=0; 75 int end=charTr.length; 76 for(int i=0;i<charTr.length;i++){ 77 if(charTr[i]==' ') 78 start++; 79 else 80 break; 81 } 82 for(int i=charTr.length-1;i>=0;i--) 83 { 84 if(charTr[i]==' ') 85 end--; 86 else 87 break; 88 } 89 System.out.println(strTr.substring(start,end+1)); 90 } 91 92 /* string 对象的创建: String name1="my";是放在内存常量区中 93 方式1: string对象是放在常量池中的一块内存地址 94 放置之前先检查该区域是否已经放有该常量,如果有,直接返回地址 95 96 方式2:String name3=new String("my"); 97 这个是放在堆内存里面的,创建出来的对象是不相等的,因为内存地址不一样 98 99 100 String特点: 101 1、由于字符串底层是由一个字符数组来实现的,所以String是不可变的 102 2、String 重写了Object的hashCode方法 103 == 表示比较的是地址 104 105 String 常用的方法: 106 107 108 */ 109 }
7.输入输出
数据流: http://blog.csdn.net/hguisu/article/details/7418161
读取输入:Scanner类 (java.util.Scanner)
1 public class TestScanner { 2 public static void main(String[] args) { 3 Scanner s = new Scanner(System.in); 4 System.out.println("请输入字符串:"); 5 while (true) { 6 String line = s.nextLine(); 7 if (line.equals("exit")) break; 8 System.out.println(">>>" + line); 9 } 10 } 11 }
格式化输出:
文件输入与输出:
java.utiil.Scanner Scanner(File f) 构造一个从给定文件读取数据的Scanner;
Scanner(String data) 构造一个从给定字符串读取数据的Scanner;
java.io.PrintWriter PrintWriter(String filename) 构造一个将数据写入文件的PrintWriter,文件名由参数指定
8.控制流
快作用域: 一个块可以嵌套在另一个块中,但不能在嵌套的块中声明同名的变量;
public static void main(String[] args) { int n; { int k; int n; //ERROR, can't redefine n in inner block } }
条件语句:
循环语句:while , do.....while
确定循环:for 若在for内部定义一个变量,这个变量不能在循环体外使用
for(int i=1; i<=10;i++) { ... } //i no longer defined here int i for(i=1;i<=10;i+=) { ... } //i is still defined here
多重选择: switch语句
中断控制流程语句: 带标签的break语句
9.大数值
java.math包提供了类: BigInteger 和 BigDecimal,实现任意精度的整型运算和浮点型运算
10.数组
创建数组时,所有元素都初始化为0,bool类型为false,对象数组的元素为null,表示还未存放任何元素;
for each循环: for(variable:collection) statement
数组拷贝:数组变量拷贝给另一个变量,此时两个变量将引用同一个数组;
命令行参数: java Message -h world ,则 args[0]= -h, args[1]= world;
多维数组: