##配置Java开发环境-Tomcat,MyEclipse
配置Windows版Tomcat服务器
- 到下载吧下载tomcat绿色安装包
- 下载后解压到某个PATH
- 新建一个系统变量,名为CATALINA_HOME,路径为PATH
- 启动Tomcat服务器:PATH\startup.bat; 停止Tomcat服务器:PATH\shudown.bat
- 打开
http://localhost:8080/
如看到Tomcat页面即配置成功
配置Tomcat默认打开的文件名
更改Tomcat的web.xml:
/haha.jsp
修改Tomcat端口号步骤
- 找到Tomcat目录下的conf文件夹
- 进入conf文件夹里面找到server.xml文件
- 打开server.xml文件
- 在server.xml文件里面找到下列信息
5.把port="8080"改成port="8888",并且保存
配置MyEclipse
可观看教程:
修改项目的虚拟路径
查看教程:
Collection
Collection中的contains,containsAll方法,都会调用equals()
来判断
HashSet和HashMap还会调用hashCode()
方法来判断
因为默认equals只是会比较内存地址是否相同,但有时我们想要的效果是某些属性相同就可认为该俩对象是相等的,
所以很多时候我们需要用eclipse来生成equals
和hashCode
方法Override(Source->Generate hashCode() and equals()...),然后选择好想要比较的属性即可
利用Arrays
把数组转换成list,也就是collection:
Arrays.asList(arr);
集合包括Collection和Map。Collection: List, Queue, Set; Map: HashMap
在集合中取出元素时类型都会为Object,故取出时需要转换类型
而利用泛型(规定某个集合只可以存放特定类型的对象,会在编译的时候检查),可以直接按指定类型获取集合元素,无须转换了
泛型不能使用基本类型,但可以使用基本类型的包装类
StringBuilder和StringBuffer
StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。
因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类
==与equals
String类的==和equals()的区别:
==:判断两个字符串在内存中首地址是否相同,即判断是否同一个字符串对象;
equals():比较存储在两个字符串对象中的内容是否一致
而Object类的==与equals都是比较内存地址是否相同。
##Java的多态
继承是实现多态的基础
有引用多态,方法多态
//引用多态Animal ani = new Animal();Animal ani2 = new Dog();//方法多态ani.eat(); // animal eatani2.eat(); // dog eat//ani2.watchDoor()是不允许的
Java的多态的好处体现于,能把同一类的但又各自又不同的对象放在同一个数组里面:
NBATeam[] arr = {new Lakers(), new Clippers(), new Magics()};
##封装与继承
子类的构造方法必须调用父类的构造方法,如果没有调用,系统会默认调用父类的无参构造方法,但如果父类没有无参构造方法,就会报错了
定义了成员内部类,必须用外部对象来创建内部对象,不能直接new一个内部对象:
Outer o = new Outer();Inner i = o.new Inner();
同时访问外部类的相同名的属性时,使用:Outer.this.name
,
创建静态内部类,则可以直接 内部类 名字 = new 内部类
StaticInner si = new StaticInner();
而访问外部类的相同名的静态属性时,使用:StaticOuter.name
,方法内部类,就是内部类定义在外部类的方法里,不能使用访问控制符和static
引入另外一个包后,如果引入的包里有相同名的class并且有相同签名的构造方法时,调用构造方法将采用引入包的class的构造方法
类里面的静态内部类
public class Animal { String name; int count; double say(String msg){ return 100; } public Animal(){ } public class AnimalInnerCommon{ public void test(){ System.out.println("AnimalInnerCommon test"); } } // 静态内部类 public static class AnimalInner{ public void test(){ System.out.println("AnimalInner test"); } }}//必须继承Animal才能使用其静态内部类public class Dog extends Animal{ double say(String msg){ return 88.8; } public static void main(String[] args){ Animal ani = new Animal(); // 直接使用AnimalInner而不用Animal或者它的实例 AnimalInner ai = new AnimalInner(); ai.test(); // 通过Animal实例来使用其成员内部类 AnimalInnerCommon ai2 = ani.new AnimalInnerCommon(); ai2.test(); }}
obj.getClass()
类对象
与类的对象
:
类对象:通过obj.getClass()
来获取,描述的是类的属性信息:姓名、身高、年龄、体重
类的对象:是一个类的初始化后的实例对象,描述的是类的属性值:熊猫、165cm、20岁、165kg
##修饰符
- private 本类
- 默认 本类,同包
- protected 本类,同包,子类
- public 本类,同包,子类,其他
##抽象类和接口
抽象类:
- 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但不关心这些子类如何实现这些方法
- 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类为子类的模板,避免子类设计的随意性
接口:接口由全局常量和公共抽象方法组成。接口默认有abstract关键字来修改,如果没写的话,系统会自动加上。
接口中的常量都是public static final
修饰符的,接口的方法都是public abstract
抽象类和接口都定义和限制子类必须实现某些接口,但区别是:
- 抽象类可以有普通的变量和方法
- 类是单继承的,而接口可以是同时实现多个
- 接口用的是interface
如果同时继承抽象类和实现接口,那么继承类需在实现接口之前
使用接口可以用接口引用来指向实现接口的类:
Interface1 i1 = new InterfaceImplementedCls();
接口还经常与匿名内部类来配合使用:
Interface1 i1 = new InterfaceImplementedCls(){ public void implementMethod(){ System.out.println("使用匿名类型类来实现接口"); }}