1、java学习日记 第一阶段2015-07-21Java语言平台的特点:跨平台 半编译 虚拟机 (andriod 也是半编译跨平台 意义不大 内存消耗比较大 相对ios优势不大)GC机制垃圾回收机制 Garbage collection面向对象:封装 继承 多态 健壮性:异常处理简单性:不支持多继承 不使用goto语句workspace用于组织多个相关的projectpackage多个类的集合 用于解决命名冲突 包的名字:全部小写 具有含义 com.icss.login.biz 范围 公司 项目 层、模块类的首字母大写,自定义的数据类型内容补充:数据类型分为两种:基本数据类型和引用类型 基本数据
2、类型:4类8种 注意:boolean是逻辑类型float用的比较少 Short char 是一个字节的11110101 int 是4字节 1Byte=8bit 引用类型 :String int 类 接口 基本数据类型和引用类型的区别 存储位置不同 基本在stack中 引用heap中 基本数据类型的存储位置是确定的主函数 Java项目程序的启动点、 public static void main(String args) 两个项目之间的相互调用 buildpath 大型的项目多用这种方式 便于分工合作alt+? 是自动匹配 自动提示 51cto 宅客学院 有肖老师的视频 51cto毕业设计步骤机
3、器语言 汇编语言- c(开发效率低 运行效率高 硬件要求低)-c+(OO开发效率高 运行效率高 有指针 会造成内存泄露)-java(OO 开发效率高 运行效率一般 优势在于GC机制 回收内存) 栈放基本数据类型和引用 引用失效 标记失效 回收内存OOP(object orient program)-SOP (service orient program)-AOP(aspect orient program) JavaSE java standard edition 标准版 JavaEE java enterprise edition企业版 JavaMe 微型版 B/S Browser serv
4、er C/S Client server Applet container (密码加密插件) Web container(tomcat)java项目的目录结构 src:存放源代码 UserUi.javabin:存放编译后的文件 UserUi.class 字节码文件,称之为半编译,虚拟机进行动态解释,边编译,边解释。 JRE java runtime evironment JDK java develop kit jdk包含jrejavac 编译器 编译.java 文件 自动编译 build automaticallyClean 清除编译 java 标识符的命名规范 :不以数字开头 不能使关键字
5、 常量命名经常使用下划线 变量不使用下划线 MATH_PAI变量的首字母小写 类首字母大写 方法的名字首字母小写是动词 匈牙利命名法:m_intUserCount; 驼峰命名法:schoolStudentName (变量和方法的名一致)java中一切皆对象 基本数据类型都有包装类 Java.lang.object 是类层次的根类 即所有类的父类 基本类型 包装类:装箱 反之:拆箱String 引用类型 字符串是常量 创建之后指向对象的内容不能更改,但是指向地址可改 基本类型的变量装的是具体的值 引用类型变量装的是指向对象的地址 System.out.println(ii+aaa+nnn); S
6、tringBuilder builder=new StringBuilder(); builder.append(ii); builder.append(aaa); builder.append(nnn); System.out.println(builder.toString(); stringBuilder 线程不安全 首选 效率高 stringBuffer 线程安全 n r 换行 转义字符 Indexof()Split 用指定的分隔符拆分字符串 例子:public class TestSplit public static void main(String args) /只是掐头 Str
7、ing str=aoo:bbb:coo; String strArr=str.split(o); for (int i = 0; i 2015-07-22 变量 声明:变量声明时没有内存分配初始化:一般声明的时候不要初始化 new关键字分配内存空间 变量的调用:作用域 生命周期局部变量:定义在方法内部作用域在声明所在的大括号内。生命周期从变量初始化被调用开始,超出作用域会被标记为可回收,自动回收。成员变量:类内的方法外部的非静态变量,又称为属性。作用域是类内所有的方法。生命周期与所在对象的生命周期一致。静态变量: 第一次调用的时候分配内存,直到程序结束。类是抽象的,对象能被销毁定义在类内方法外
8、,类变量,不是属性。通过类的名字.直接调用。作用域和成员变量一样。通过对象调用也可以,多个对象共享一块内存,不属于某个对象。 /短路算法 null判断在在前 if (uname!=null&pwd!=null&!uname.equals()&!pwd.equals() /避免出现空指针异常错误 对数组的声明和初始化public void testSz() int sz; /数组的声明 String sz2; User users; sz=new int5; /数组的首地址在栈里,在heap中分配5个连续的4字节内存空间 sz2=new String5; users=new User5; sz2
9、0=a1; /在heap中分配内存a1,然后把首地址给sz20; sz21=new String(a2); users0=new User(); /在heap中分配内存User,然后把首地址给users0;断点调试 双击左边空白处,设置断点右键debug F6 单步调试 F8 从当前断点跳到下一断点,如果没有,结束调试 抽象和封装抽象:从对象个体中提取他们的共同的特征,形成一类物体Class对象:具体的个体在计算机中,对象是类的实例(可以分配内存的,这个过程叫做实例化) User u /对象的声明 u=new User() /对象的实例 面向对象的提取过程提取所有的名词性概念 生成概念模型(需
10、求分析阶段)名词可以生成类或者类的属性找动词提取方法导包的快捷键 ctl+alt+oThis :类的当前对象构造方法: (1)给必要的属性初始化 把局部变量赋值给成员变量 (2)成员变量先赋值再执行构造函数。构造方法特点 方法名和类名一致(首字母大写) 没有返回值 一个类有多个构造方法有参数的构造中参数传进去的是必要的信息,区别于对象中的赋值。/把局部变量的值赋值给成员变量/在构造方法里设置默认值抽象的类属性不能有具体的值,除非默认属性值在构造函数中初始化 public Dog(String name) /必要信息作为参数 this.name=name; /局部变量给成员变量 this.hea
11、lth=70; /设置默认值 2015-07-23软件的要求:高内聚低耦合、SRP:simple responsible priniple简单责任原则OCP:Open close principle 开放关闭原则对于功能的扩展是opened 对于功能的修改时closedOop的三大特点是:封装 继承 多态抽象是把对象共有的特征抽取成类。封装:目的是安全 封装的步骤:属性设置成private添加set get 方法在set中过滤不合理的入参如何设置只读属性:通过构造函数的参数给属性赋值把属性的set方法删除 用于封装的常用关键字:private public protected 默认对象的初始化
12、方法:1.通过构造函数,传入参数,给必要的属性初始化,同时可以设置默认值2.通过对象.属性的方法初始化对象3. public void init() private 关键字:只有类的内部可以调用public 关键字:访问权限最大,类的内部对象都可以调用注意:局部变量必须初始化,属性可以不用初始化static 关键字:1常量的定义:static+final关键字常量特点永远不会变化不会占用内存 在编译的时候已经写死了,编译到源文件里,节省内存 举例子用PI 先配置,再使用,直接在源代码修改常量value 变量用final关键字赋值一次后也不能改变。所以值是否可改不是常量的专有特点。变量在编译的时
13、候占内存。Static变量和static方法静态变量: 第一次调用的时候分配内存,直到程序结束。类是抽象的不分内存,对象能被销毁类变量,不是属性。通过类的名字.直接调用通过对象调用也可以,多个对象共享一块内存,不属于某个对象静态方法:类方法,静态方法中只能有静态变量和方法静态方法和属性的关系: 静态方法可以直接调用静态属性,但是不能直接调用所在类的非静态属性。 静态方法不使用this(静态属性也不使用this)关键字。注意:在方法内部不能够定义一个static局部变量补充:成员变量和局部变量冲突的时候用this区别,静态变量和局部变量冲突的时候用类名.来区别。局部变量优先。public cla
14、ss PetSex public static final String MALE = male; public static final String FEMALE = female; /常量 static+final关键字 内存不变值也不变 public final String F_MALE; /final修饰后的变量 public static String T_MALE = male; /静态变量 值可以改变,内存不变,用类名调用 public static String T_FEMALE = female; public PetSex() /使用场景:配置文件的读取,如数据库连接
15、this.F_MALE = male; /只允许赋一次值,然后就不能改变了 public static void testStatic() /在静态方法中,不能直接调用所在类的属性 /System.out.println( this.F_MALE ); /Cannot use this in a static contex PetSex p = new PetSex(); /System.out.println(p.F_MALE); String T_MALE = DDDDD; /重名的时候,局部变量优先 System.out.println(T_MALE); /DDDDD System.ou
16、t.println(PetSex.T_MALE); /输出上面的静态变量 方法的重载:方法名相同 参数列表不同 与返回值和修饰符无关2015年7月27日 星期一作业 包装和equals复习三种变量复习了 equles和=区别。对象是否相同看首地址和类型是不是相同。Xml 可扩展性标记语言讲解见文档xml讲解Stack和heap的区别和关系(内存管理机制pdf)装箱与拆箱的定义作用和重要的类?(见ppt) 作用:JAVA一切皆对象。多线程,反射,哈希。多线程下基本数据类型是无法操作的,所以要包装。List是个典型的并发环境,并发环境下需要使用引用,基本数据类型办不到。为了让他按对象处理。 为什么
17、要使用包装类?(1)为了在各种类型的转换(2)有时候,一个函数需要传递一个Object类型的变量,而你想传递int类型的,所以使用包装类利于传值(3)当需要往ArrayList,Hashmap中放东西时,像Int,double这种基本类型放不进去,因为容器都是装的object的。多线程下基本类型没有办法引用基本类型,比如说集合ArrayList,它是一个并发环境,如果往里面放int,放不进去,所以想让它当对象处理必须用包装类。装箱:基本数据类型转为对象类型。int k = 100; Integer kk = k; /自动装箱拆箱:对象类型转为基本类型包装类: Byte, Character,
18、Boolean, Short,Integer, Long, Double, Float装箱的步骤:(1)创建包装器对象。除Character之外,所有的包装器都提供两个构造函数,一个是基本类型,一个是字符串。 Integer i1 = new Integer(10); Integer i2 = new Integer(10);Character类只提供一种构造函数Character c1 = new Character(a);(2)通过对象的构造函数,或者使用valueOf()方法实现装箱操作: boolean aa = true;Boolean ab = new Boolean(aa);Bo
19、olean ac = new Boolean(true);boolean c = true;Boolean d = Boolean.valueOf(c);Boolean e = Boolean.valueOf(true);拆箱的步骤:(1)直接用parseXX()方法:它是由Byte,Short,Integer,Long, Float,Double,Boolean包装器提供的一个类的静态方法,用于实现String到基本类型的转换(Character除外)ex:int a = Integer.parseInt(10);(2)xxValue()方法所有包装器的对象都提供了一个相应方法,用于返回到基
20、本类型,即拆箱操作 Integer aa = new Integer(10); int bb = aa.intValue();4 继承: (1)优点:大量减少子类中重复代码(重复代码抽取法) 子类和父类之间是 is-a的关系。如Dog is a Pet 组合(composite)或者聚合(aggregate):-has-a的关系 例如: Aggregate(by value , by reference) 班级和学生的关系(by reference 生命期不一致) 学校和班级的关系(by value 生命期一致)父类属性提取方法:提取所有子类的共性属性和方法 父类的构造方法先执行 /通过子类,
21、像父类传参数 Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor 删除子类中的重复属性继承:子类会继承父类的非似有的属性和方法知识点:子类和父类之间 属性和构造方法的执行顺序 子类和父类的属性同时赋初始值 先调用父类的属性赋值 private double age=4; 调用父类的构造函数,给父类的属性赋值 public Pet(String name) this.name = name; this.health = 70; 给子类的属性赋值private doubl
22、e age = 3; 调用子类的构造函数,给相关属性赋值【看7-27的PetGame中的dog和pet】public Dog(String name)/子类的构造方法会自动去先调用父类同等结构的构造方法super(name); /一定要在第一句this.name = name; /把局部变量的值,赋给成员变量(当局部变量与成员变量同名时,局部变量优先)this.health = 80; /设置属性默认值 Dog dog=new Dog();内存只有一块,父类和子类对象都在里头(3)重写 override 子类和父类有同名同参的方法 子类和父类拥有同名同参的方法,调用时会调用子类的这个方法编译与
23、预编译:预编译又称为预处理,处理以 # 开头的指令,做些文本代码的替换工作。封装的几个关键字对比:(1)private:只有类内的方法和属性才能使用(作用域是类内)(2)Public :子类和对象都可以调用(从任何地方都可以调用属性和方法)(3)Protected:子类可以直接调用父类的属性和方法(不区分包内包外); 同一包内的对象可以调用。(Dog dog=new Dog(); dog.name=aaa;)(4)默认:包内(对象和子类)都能调用。主要用于修饰类。仅限于包内。class Pet ,这样即使你做了jar包的引用,也不能使用某些类所以调用属性或方法的三种:类内调用;对象调用;子类调
24、用this:对象本身;super:父。 public Cat(String name) super(name); super.swim(null); super.age = 10; 子类重写了父类的方法之后,Dog dog=new Dog(); t=dog.getAge(); -调用子类的getAge()方法。 Pet pet=(Pet) dog; T=pet.getAge(); -调用子类的方法,因为子类已经把父类的给覆盖了子类可以继承父类哪些成员:非私有成员 Dog dog = new Dog(旺财); Pet pet = (Pet)dog; -子转父,是安全的转换 Pet pet = n
25、ew Pet(ddd); Dog dog = (Dog)pet; -父转子,可能会出错 if(pet instanceof Dog) Dog d = (Dog)pet; System.out.println(类型转换成功); 抽象类中可以写抽象方法:public abstract void play(); -非抽象类中不能写抽象方法子类如果是非抽象类,就必须重写父类的抽象方法。final关键字的4种使用方法:1. 用于修饰class,使该class不能被继承2. 方法不希望被重写,可以使用final修饰-如打好jar包的类库3. 属性不希望被修改,用final修饰4. final Dog =
26、new Dog(); 锁住引用。2015-7.28 周二1、宠物的color属性是放在子类好、还是父类好? 有些属于子类的特有属性和行为,放在父类则透明性好,放在子类则安全性好。问题:透明与安全。2、抽象类的特点:不能实例化。This与super的区别:?(1)this代表对象自身。Super代表父类。(2)子类和父类都同时有同名的变量(name)时,this.name是找的是子类的name(子类父类都定义);子类没有name的时候,this.name调用的是父类的。Private final String ip=10.0.1.2; /在这里直接赋值之后,就变成了常量。Private fina
27、l String ip;/在这里定义,在构造方法里赋值,这里是变量。Final Dog dog=new Dog(旺财);dog.setName(缓缓);/final修饰引用类型的变量,变量的值是不变的,变量指向的对象的值是可变的汽车租赁项目练习: 1、抽取名词性概念:汽车;租赁公司、车型、日租金;常量:别克商务、宝马550 2、抽取动词:出租单辆车、出租多辆车 3、抽象class: 4、名词不是类就是属性。2.015-7.30 星期四 接口1、接口:接口是对象能力的表示 类是单线继承的,不允许多重继承(使用接口达到多重继承)2、接口的命名:(1)按照能力的语言表示。直接命名:Swim(2)匈牙利命名法:ISwim(3)SwimInterface3、接口的特点: (1)所有的方法都强制为抽象方法 (2)一个接口中可以写多个与接口相关的抽象方法 (3)某个类实现了接口,就要重写接口中的所有的抽象方法 (4)一个类可以实现多个接口 (5)接口中不能存在属性,可以有常量*面向接口的编程*public void Swim(ISwim pets,Pool pool)作业:自学enum类型。接口与抽象类的区别:(1)抽象类里可以有属性,接口中只能有方法和常量(2)抽象类中可以有方法的实现-接口中都是抽象方法多态:形参使用的是父类
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1