




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010-7-23猛哥推荐技术网站CSDN IBM中国 J道 javaBBSJava语言的好处1、加速开发速度2、一次编写到处运行(跨平台,windows下的ext在linux,unix下不可执行)3、简化开发,降低开发难度4、对外没有指针(JVM是用C+实现的)Java属于复合型:先编译后解释。JDK的环境变量配置Windows下在我的电脑系统属性高级环境变量配置JAVA_HOME 中配置的是java的安装目录Classpath中配置的是class文件的目录,一般配置,既可以配置jdk中的jar包进去(JDBC会自动配置),类库的路径(lib),”.”一般代表当前目录Path中配置的是可执行命令的路径(bin),path在windows系统变量中是有的,配path时千万不要将原来的内容删除,在最前面配置。linux下Java环境的配置Linux:/etc/.profile这是所有用户的全局文件主目录下的.bash_profile 这是当前用户的全局文件到当前用户的目录下,用vi .bash_profile在文件的最后加上以下内容(文件非空)export JAVA_HOME=某个目录(bin和lib的上层);expert PATH=某个目录bin:$PATH;其中PATH绝对不能错,否则系统会崩溃export CLASSPATH.:某个目录/lib;保存退出。 二、第一个程序体验步骤:1、vi xx.java2、编辑xx.java文件3、javac编译生成xx.class文件4、如编译通过,用java 包名.类名运行package day01;public class First public static void main(String args) String name=wang; int age=25; System.out.println(my name is :+name); System.out.println(my age is :+age); 编译运行:编译:javac -d . First.java /d 代表生成目录,.代表当前目录,把目录生成到当前。即,自动生成day01包javac First.java /编译在当前目录中运行:java day01.First(xx.java是java源文件,xx.class是字节码文件)类加载类的加载过程类加载器(classsloader)加载字节码到内存,JVM内存数据区将对象状态放置在堆区,各线程使用的变量放在栈区,类的特征放在方法区。然后进行字节码验证(Byte code verifer),再执行。字节码验证:验证代码是否符合JVM规范;是否破坏系统完整性;是否堆栈溢出;参数类型是否正确;类型转换是否正确;什么时候类加载:第一次需要使用类信息时加载。 类加载的原则:延迟加载,能不加载就不加载。 触发类加载的几种情况: (1)调用静态方法时会加载静态方法真正所在的类。 例:通过子类调用父类的静态方法时,只会加载父类而不会加载子类。 (2)调用静态初始化代码块时要加载类。(3)加载子类时必定会先加载父类。(4)构造对象的时候会加载。(5)调用静态属性时会加载类。注:如果静态属性有final修饰时,则不会加载。new申请JVM通过gc(garbage collection)垃圾回收机制完成内存释放.程序员可以通过java.lang.System.gc()/java.lang.Runtime.gc(),建议JVM释放内存(只是建议权).Window 和Linux 下的JVM不同(windows和linux的机器指令不同),但相同的class文件在两中不同的JVM下运行的结果相同。Java JDK基本包Jvav.lang java核心包(重点)Java.awt/javax.swing/java.awt.event GUI图形用户接口Java.applet 小应用程序Java.io 输入输出J 网络Java.util 工具包(重点)重要的非JDK包Java.sql/javax.sql 数据库操作(重点)2010-7-24Comments:注释对程序本身没有作用,注释是写给程序员看的 three types of comments/comments on one line单行注释从/开始到行结束 /*Comments on one or more lines*/多行注释从/*开始到*/之间的是注释部分/*documenting comments*/(recommended)文档化注释,与javadoc结合,生成API文档标识符给类、方法或变量起名称,汉字也可以做标识符在写代码是要注意中英文切换,注意程序中的 + - “ ( = 都必须在英文状态下输入编程规范:1、 类名或接口名的每个单词的首字母大写(如 TestString)2、 变量名或方法名第一个单词首母小写,其他单词首字母大写(如 userName)3、 常量的所有字母都大写,不同单词之间用”_”隔开(如 MAX_NUM)4、 包名的所有字母小写,不同单词之间用“.”隔开(如com.tarena.chiao.util)关键字:abstract 抽象类 continue结束本次循环 for new 申请内存 assert断言 default switch中 goto package boolean 布尔型 double 双精度浮点型 if protect break 跳转 do do while implement 继承 public byte整形 else if/esle import 导入 private caseswitch enum 枚举 instanceof 判断对象类型 return char 字符型 extends 继承 int short catch 捕获异常 final 最终 interface static 静态 class 类 finally 异常处理 long strictfp const 保留关键字float 单精度浮点型 native本地 super 父类 switch synchronization 同步this throw throws transient 对象序列化try void volatile 同步变量 while const 和goto在java中留而不用,是保留的关键字。true、false 和 null 是保留字,但不是关键字,但还是不能做标识符。数据类型:基本类型为一个值,引用类型包括一个引用和一个对象Java中的变量必须先声明类型,然后才能使用。第一次赋值叫变量的初始化。变量不能在英文双引号中。Java变量类型:基本类型:(内存存值) boolean、char、byte、short、int、long 、float、double类 型比特数(bit)字节数(byte)取值范围说 明byte81-2727-1(127)-2(比特数-1)计算负数的取值范围 ; 2(比特数-1)-1计算正数的取值范围。short162-215215-1int324-231231-1long648-263263-1char1620216-1(65535)float324double648引用类型:(引用地址+ 对象) 所有类、接口、数组、枚举、标注char是16位的Unicode字符,可以同时具备字符和整数的特性。Java默认的整型类型是int型,默认的浮点型是double型。boolean 型值为true或false,默认为false。不能用1来代表true,用0表示false大于号不能用于比较String, String 的相等用equals()判断。数字默认位int类型,两个byte类型的数运算,要先转化位int类型,结果为int类型1、常数在数据类型范围内可以化位任何整形数据2、长度小的数据类型可自动转换位长度大的数据类型(也有可能丢失精度)3、长度大的转换位长度小的必须经过强制类型转换小数默认类型位double类型,小数都是近似值,二进制无法精确表示0.1由于由科学计数法所以float和double没有表示范围,只有精度int和long 都可以自动转换位float或double型byte b1 = (byte)128; /强制类型转换,只是截取了后8位,前面的全部舍弃。面向对象的概念对象的核心思想是:一切都是对象everything is object(客观世界的一切事物)。特征:属性; 行为:方法面向对象编程:1 看到的所有学生对象2 分类学生类3 分析特征属性(有选择)定义属性类型和变量名4. 分析行为定义方法名/返回类型(方法名前)/参数列表(方法名后()中)返回类型用于传出,参数列表用于传入。没有返回void,没有参数传入,留下()public class StudentString name;int idint age;/属性/方法public String eat(String cn)System.out.println(cn+很好吃);return ok;public static void main(String args) Student s = new Student();/new为构造器,为 new Student() 申请内存地址,s引用,/new Student()为对象,Student为类s.id = 1; = zhangsan;/创建对象String str = s.eat(烩面);/行为执行,“烩面”是传入,str是传出,/eat方法中的所有代码都执行完毕后才能继续执行System.out.println(str);2010-7-26内存的分类1、 栈基本类型,地址,后进先出。引用变量入栈(给以在堆空间的内容的首地址)2、 堆-对象,基本类型,地址3、 寄存器零食变量4、 代码段方法的代码5、 池常驻内存的数据注意:程序一般都会先找栈,再找堆堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本 类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。JVM运行时,将内存分为两部分,一部分是栈,一部分是堆。栈中存放的是方法调用过程中的局部变量或引用,堆中存放的是创建时的对象。而设计java字符串对象内存实现的时候,在堆中又开辟了一块很小的内存,称之为字符串常量池,专门用来存放特定的字符串对象。public class EmpString id;String name;double salary;public void pay();public void addPay();public static void main(String argsEmp e=new Emp();e.id=”007”;=”yhw”;e.salary=3000;e.pay();堆007yhwe栈Emp idnamesalaryEmp e=new Emp();在内存中发生的动作将e进栈,在堆里申请一块内存Emp,Emp中,放id,name的地址,sal的值,当给id,name赋值的时候,在堆里为id,和name分配内存,将他们的值放进去package语句必须放在程序的第一行,以分号结束。编译:javac d . 文件名.java运行:java 包名.文件名import 语句可以导入不同包的class 文件import 包名.类名import 包名.* /*代表所有的.class 文件,但不包括子目录。Jvm 在导包时会自动导入java.lang 中的所有类,所以不需要导java.lang包。基本的控制台输入可以使用java.util包下的Scanner类Scanner in = new Scanner(System.in);String a=in.next();/读取一个字符串String b=in.nextLine();/读取一行int c=in.nextInt();/读一个整数double d=in.nextDouble();/读一个浮点数使用输入框输入是使用javax.swing包中的JoptionPane类String input=JOptionPane.showInputDialog(“please input your name”);当程序调用JOptionPane的方法时,结束程序要用System.exit(0);格式化输出jdk5.0开始,沿用了c函数库中的printf()方法,可以用来格式化输出也可以使用String.formate()方法创一个格式化的字符串扫描键盘输入:import java.util.Scanner;/扫描键盘输入public class TestKeypublic static void main(String args)Scanner sc = new Scanner(System.in);/new申请内存空间String str = sc.next();/扫描字符串System.out.println(输入了+str);int a = sc.nextInt();/扫描intSystem.out.println(输入了+a);double d = sc.nextDouble();/扫描doubleSystem.out.println(输入了+d);运算符优先级:a*=b和a=a*b不是绝对相同()的优先级高;=是赋值运算符,它的优先级低;instanceof:判断对象类型。=用来判定相等;int/int 取整数部分;double和int混合运算时按double运算。自增和自减:只能用于变量。前+,先+后其他运算(运算时取得是+后的数);而后+先运算后再+(运算后再+);a=b+; /先将b赋给a然后给b加1a=+b; /先将b加1,然后将b赋给apublic class AddAddpublic static void main(String args) /int i = 3;return i+;/返回3int i = 2;System.out.println(/*+i*/i+);/2System.out.println(i);/3int a = i+ + +i;/3+5System.out.println(a);/8System.out.println(i);/5for(int j=0;j1000;j+)/循环1000次 i = i+;/i = 5;(2) i+;(1)/i = +i 输出1005/ i=i+;先将i保存于寄存器变量k中,然后将i+,最后将k赋值给i。/相当于int k=i;i=i+1;i=kSystem.out.println(i);/5byte b1 = 2;byte b2 = 3;b1 = (byte)(b1+b2);/加法,转intb1+=b2;/赋值,不转int移位运算符包括:“”(右移,高位添符号位)“”(无符号右移,高位添0补齐)它们用来对操作数进行移位运算。public class TestShiftpublic static void main(String args) int i = 7;/00000111System.out.println(72);/00000001System.out.println(734);/在移位前会先对32/64取余数,34%32=2System.out.println(7-30);/负数的移位先+32/64的倍数,转成正数 System.out.println(-72);/前补1System.out.println(-72);/前补0Java中的逻辑运算符包括:!(逻辑非),运算符“! ”用于对逻辑值进行取反运算,&(逻辑与),|(逻辑或)三元运算符“?:”的应用形式如下:布尔表达式?表达式1:表达式2三元运算符“?:”的运算规则为:若逻辑表达式的值为true,则整个表达式的值为表达式1的值,否则为表达式2的值。(表达式1的类型和表达式2的类型有时可能必须一致,也可能不一致。表达式1和表达式2的类型之间可以转换也行)public class TestCon public static void main(String args) int a = 5;int b = 3;System.out.println(ab?a:b);/:前后的类型可能必须一致,也可能不一致System.out.println(ab?ok:b);流程控制语句:分 支 语 句:if else 和 switch case if(表达式1)/出现only 1次 语句序列1else if(表达式2)/0n 次 语句序列2else /01次 语句序列n循 环 语 句:while 、do while和for跳 转 语 句:break和continuecontinue与break语句不同之处在于continue语句只是结束本轮次的循环(然后重新开始新一轮的循环),而break语句则立即结束整个循环语句。2010-7-27int max = a;if(maxb) max=b;if(maxc) max=c;System.out.println(max);输入三个数中的最大数public class TestBCpublic static void main(String args)for (int i=1;i=500 ;i+)/continue 到这里if(i%100=0) break;if(i%5=0) continue;System.out.println(i);/break到这里for(;) if(条件) break;/死循环+按条件的break可以实现次数不确定的循环。import java.util.*;public class TestBreakpublic static void main(String args) Scanner sc = new Scanner(System.in);for(;)String temp = sc.next(); /比较字符串时,用equals()if(bye.equals(temp) break;System.out.println(你说:+temp);双重循环:public class MultiplicationTable/乘法表public static void main(String args)for(int i=1;i10;i+)for(int j=1;ji+1;j+)System.out.print(i*j+ );System.out.println();求素数。import java.util.*;public class SuShupublic static void main(String args) System.out.println(请输入整型数字:);Scanner sc = new Scanner(System.in);int max = sc.nextInt();System.out.print(素数有:);for(int i=2;i=max;i+)boolean flag = true;int a = i/2;for(int j=2;j=a;j+)if(i%j=0)flag = false;break;if(flag) System.out.print(i+ );编译后出现“无法访问的语句”是死循环2010-7-28break 和continue的带标号用法:break可以用来跳出当前的循环体,break还可以带标记,用break跳出标记所标的循环。 continue 用来跳出本次循环,如果带标记,也可以结束标记所标循环本次循环,继续下次循环 public class TestLable1public static void main(String args) /*outer:*/ for(int i=0;i10;i+)System.out.println(i=+i);for (int j=0;j=i;j+)if(j%5=0) continue ;/outer;(outer的名字可以随便取)System.out.println(j=+j);/不执行/不执行System.out.println(over);/不执行switch(变量)/变量的类型可以为byte、short、int,、char和枚举。case 值1:语句; break;.default: 语句; break;/break可以省略。只含有有限个(少量)的值可考虑使用switchcaseCase是可选的,每个case后一定要加break,不然会顺序执行后面的case语句。while(条件)/循环变量初始化循环体;步进语句;while(true)/while的死循环do循环体;步进;while(条件);public class TestDoWhilepublic static void main(String args) int i= 1;while(i1)System.out.println(i);i+;System.out.println(*);int j = 1;doSystem.out.println(j);j+;while(j1);/do while循环至少执行一次数组:数组是一大片的内存,是同一类型的数据集合。数组是引用类型。数组元素是数组中的一个数据、数组下标是数据在数组中的位置A a /当A为类型时,a为引用名,中存的是引用地址public class TestArraypublic static void main(String args) /*int arr = new int5;/System.out.println(arr0);for(int i=0;iarr.length;i+)arri = i+1;*/数组的动态初始化int arr = 1,2,3,4,5;/静态初始化int arr1 = new int1,2,3,4,5/静态初始化for(int i=0;iarr.length;i+)System.out.println(arri);/取出数组元素数组在内存中的结构:栈堆 引用对象静态初始化:元素无规则(不从设备读,个数少)动态初始化:元素个数多;从设备读排序:冒泡排序、插入排序、选择排序、快速排序从小到大,叫升序;从大到小,叫降序。冒泡排序:(两重循环)相邻比较,如前面大,交换。Java中的下标除了JDBC都是从0开始。JDBC的下标从1开始。import java.util.Arrays;/为数组服务的一个工具类public class BubbleSortpublic static void main(String args)int arr = 7,6,5,4,3,2,1;/*for (int i=0;iarr.length;i+)for(int j=0;jarrj+1)/交换的算法int temp = arrj;arrj = arrj+1;arrj+1 = temp;*/Arrays.sort(arr);/数组排序方法for (int i=0;iarr.length;i+)System.out.println(arri);不用中间数交换的算法:public class Exchange public static void main(String args) int a = 4;int b = 5;/*a = a+b;b = a-b;a = a-b;*/a = ab; b = ab; a = ab;System.out.println(a=+a);System.out.println(b=+b);数组的拷贝可以使用System类的System.arraycopy(form,i,to,j,num);参数解释:from为被拷贝数组,从from 的第i个位置开始,拷贝到to数组,从to数组的第j个位置开始,拷贝num个元素。java.util.Arrays;/数组工具类Arrays.sort(int a)对数组排序2010-7-29二维数组就是由一维数组组成的数组(二维数组的元素是一维数组)。数组长度一旦确定不能改变。二维数组:元素为一位数组的一位数组注意区别下面两种写法:int arr=new int5;int arr1=new int53;addraddr1地址地址0地址地址地址地址nullnullnullnullnull00/二维数组静态初始化Stringstr=zhang,wang,li,a,b,c,1,2o,p,q;public class TwoArr/二维数组public static void main(String args)int arr = new int5;int arr1 = new int53;/System.out.println(arr11);/空指针异常System.out.println(arr111);for(int i=0;iarr.length;i+)arri = new inti+3;for(int j=0;jarri.length;j+)arrij = i*j;/动态初始化完毕for(int i=0;iarr.length;i+)for(int j=0;jarri.length;j+)System.out.println(arrij);System.out.println(*);/取出元素和数据面向对象:OOA(object oriented analysis)面向对象的分析OOD(object oriented design)面向对象的设计OOP(object oriented programming)面向对象的编程OOT(object oriented test)面向对象的测试UML:统一建模语言面向对象的概念类的定义构造,重载(方便调用),覆盖对象的创建和初始化类型转换,instanceof操作符Static, final,abstract 关键字抽象类,接口类代表一类事物对象具体的一个事物类是对所有对象(特征和行为)的总结,现实中是找不到的,是一种抽象的概念,代表一类事物。类:类可以将数据和函数封装在一起 ,其中数据表示类的属性,函数表示类的方法。定义类就是定义类的属性和方法。类的属性又叫成员变量,类的方法又叫成员函数。对象是现实的一个事物,是类的个体,对应现实事物的特征和行为。对象的比较有两种,“=”和“equals()方法”。“=”用于比较两个变量的值是否相等(对引用来说值即是地址),“equals()方法”用于比较两个对象的内容是否一致。equals()是String类的一个成员方法。写一个类要用到的语句package 包名;import 包名.类名; 包名.*;修饰符 class 类名属性/构造方法/方法/内部类/代码块构造方法:修饰符 ()方法:修饰符 ()throws 异常类修饰符可以为public private static final abstract 等,变量成员变量(相当于c+中的全局变量)、局部变量成员变量分为类变量、实例变量类变量:用static修饰,在类的任何地方都可以使用,系统会自动为其赋默认值。实例变量:在类的所有非静态区域都可以使用,系统会自动为其赋默认值。实例变量是这个类的对象里的变量,它和静态变量不同,它只能由创建出的对象来调用,所以实例变量是从这个对象(其实就是实例)被创建开始,直到这个对象没有任何引用。局部变量在方法中声明,仅在本方法中可使用,系统不会自动为其赋默认值。参数传递:java中只有值传递,对于基本类型变量,参数传递的是变量的值的拷贝,对于引用类型变量,参数传递的是变量的引用的拷贝。Eclipse以项目为单位,类属于项目。Eclipse里保存就自动编译,红线表示错误,黄线表示警告。2010-7-30构造方法是一种特殊的方法,它的名字必须与它所在类的名字完全相同,并且没有返回值,也不需要使用关键字void进行标识。构造方法用于对对象中的所有成员变量进行初始化,在创建对象时立即被调用。注意:java的每个类里都至少有一个构造方法,如果程序员没有为每个类定义构造方法,系统会自动创建一个默认的构造方法,这个构造方法既没有参数,方法体中也没有任何代码,即什么都不作。一旦程序员为每个类定义了构造方法,则系统就不会再创建默认的构造方法。只要定义有参数的构造方法,都需要再定义一个无参数的构造方法,以免有时候程序发生错误。new xxx(); 1 申请内存空间(包括自身的属性,属性的属性)2 属性赋默认值(byte:0,int:0,long:0L,float:0.0f,double:0.0,boolean:false,引用:null,char:u0000)3 属性赋初值4 执行构造方法中的代码package week2.tarena.day01;public class TestInit int i = 5;public TestInit()System.out.println(i=+i);/5i = 10;public static void main(String args)TestInit ti = new TestInit();System.out.println(in main: i=+ti.i);/10程序结果:i=5;in main: i=10面向对象基本特征:封装、继承、多态、(抽象)封装:(所有的非常量属性基本都要封装)1 属性私有2 提供public读写方法(get/set)3 在构造中调用方法package week2.tarena.day01;public class Student private String name;private int age;/类外隐藏,对类外提供读(getAge)和写(setAge)方法public Student()/无参构造public Student(String name,int age)/全参构造setName(name);this.age = age;/不好setAge(age);/写一次,其他地方调用(代码复用性)public String getName() return name;public void setName(String name) = name;public void setAge(int age) if(age0&age0&age130)this.age = age;elseSystem.out.println(年龄错误);public int getAge()return age;package week2.tarena.day01;public class Teacher extends Person public Teacher()System.out.println(Teacher);/调用无参的构造public Teacher(String name,int age)super(name,age);/super()和this()必须出现在构造的第一行System.out.println(Teacher2);public static void main(String args)Teacher t = new Teacher();Teacher t1 = new Teacher(li,25);/构造不能继承System.out.println(t.hashCode();/hashcode来自Objectt.setName(chiao);t.setAge(24);System.out.println(t.getName()+ +t.getAge();System.out.println(t1.getName()+ +t1.getAge();关键字 super1 Super()表示调用父类的构造方法2 Super()也和this一样必须放在方法的第一行第一句。3 Super.XXX表示调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春电子科技学院《宏观高级社会工作实务》2024-2025学年第一学期期末试卷
- 惠州城市职业学院《开源大数据核心技术实验》2024-2025学年第一学期期末试卷
- 2025年物流工程与管理专业基础题集
- 贵州省遵义市四城区联考2023-2024学年高一下学期4月月考生物试题(解析版)
- 2025年初试高级厨师烹饪技能评估与面试模拟题详解
- 甘肃省张掖市某校2024-2025学年高二下学期期中考试生物试题(解析版)
- 2025年程序员考试备战手册
- 2025年游戏策划师高级面试模拟题集及解析
- 福建省三明市五县联盟2024-2025学年高二下学期期中质量检测生物试题(解析版)
- 北京市西城区2024-2025学年高二下学期7月期末考试生物试题(解析版)
- 备战2024年高考英语考试易错点16 阅读理解:词义猜测题(4大陷阱)(解析版)
- 奇瑞汽车使用说明书
- 癫痫病人的护理
- 动环L1试题题库(494道)
- 癫痫的治疗(讲课)
- 安顺康闽果食品有限公司年产240吨年糕生产线建设项目环评报告
- 安全生产基本知识(乡镇办人员)培训课件
- 银行安全保卫工作会议记录
- 西北地区农村生活污水处理技术指南(试行)
- 学校宿舍楼建筑装饰工程招标控制价编制技术经济分析
- 玩具厂作业指导书(含管理制度、规程)
评论
0/150
提交评论