###11.01_Java开发工具(常见开发工具介绍)(了解)
A:操作系统自带的记事本软件
B:高级记事本软件
C:集成开发环境 IDE
(Integrated Development Environment)
D:Eclipse和MyEclipse的区别
a:Eclipse是一种可扩展的开放源代码的IDE,里面可以安装很多插件。是IBM花了4000万美金研发的,Eclipse凭借IBM火起来了,IBM借助Eclipse让公司更加强大了。
b:Eclipse的特点描述
免费
纯Java语言编写
免安装
扩展性强
c:MyEclipse
在Eclipse基础上追加的功能性插件,对插件收费
在WEB开发中提供强大的系统架构平台
E:下载 http://eclipse.org/
org是非盈利团体
F:安装
绿色版解压就可以使用(Eclipse)
安装版 双击运行,一路next即可(JDK)
G:卸载
绿色版直接删除文件夹即可
安装版 专业卸载软件或者控制面板添加删除程序
###11.02_Java开发工具(Eclipse中HelloWorld案例以及汉化)(了解)
A:选择工作空间
工作空间 其实就是我们写的源代码所在的目录
B:用Eclipse来完成一个HelloWorld案例
代码以项目为基本单位
创建项目
右键/Package Explore 空白区/new /Java Project/输入项目名称如day11/
创建包
打开上面建立的day11项目/右键/new/package/在弹出的对话框的name中输入报名如"com.itheima.eclipse"/finish
创建类
创建一个java类:右击报名/new/class/在对话框的name中输入类名/finish,详细信息如下图:
编写代码
案例:HelloWorld代码如下
package com.itheima.eclipse;
?
public class HelloWorld {
/
@param args
/
public static void main(String[] args) {
System.out.println("aaaa!!!!!");
int num = 10;//如果没有下面的输出语句来输出num的话,在num下面就会有黄色的波浪线
System.out.println(num);
}
}
上面的案例,保存后会在bin目录中对应的文件路径下自动生成HelloWorld.class文件,而且每次对HelloWorld代码修改保存(自动编译,而且编译时对对语法进行检查,如果有错误,会有红色警告)后,会自动生成一份新的.class文件。
运行上面的代码的方式:F11或者右键/Run As /Java Application或者点运行按钮
C:编译和运行
D:Eclipse的汉化
从Eclipse3.5开始,安装目录下就多了一个dropins目录,只要将插件解压后放到到该目录即可。
同理,这种方式卸载插件也是特别的方便,推荐这种方式
E:语法检查提示
红色波浪线
必须处理,否则编译通不过
黄色波浪线(如定义了一个变量,但是没有使用,就会有黄色波浪线的提示)
可以不搭理他
###11.03_Java开发工具(Eclipse的视窗和视图概述)(了解)
A:视窗 每一个基本的窗体被称为视窗
PackageExplorer(包资源管理器) 显示项目结构,包,类,及资源
Outline(大纲视窗,相当于看书的目录) 显示类的结构(成员变量,成员方法,构造方法),方便查找,识别,修改
Console 程序运行的结果在该窗口显示
Hierarchy 显示Java继承层次结构,选中类后F4
B:视图 是由某些视窗的组合而成的
Java视图
Debug视图
案例:查看Outline的效果
package com.itheima.eclipse;
?
public class HelloWorld {
/
@param args
/
public static void main(String[] args) {
System.out.println("aaaa!!!!!");
int num = 10;// 如果没有下面的输出语句来输出num的话,在num下面就会有黄色的波浪线
System.out.println(num);
}
?
private int num1 = 10;
int num2 = 20;
protected int num3 = 30;
public int num4 = 40;
?
private void method1() {
?
System.out.println(num1);
}
?
void method2() {
?
System.out.println(num2);
}
?
protected void method3() {
System.out.println(num3);
}
?
public static void method4() {
}
?
public static final void method5() {
?
}
}
###11.04_Java开发工具(Eclipse工作空间的基本配置)(掌握)
A:程序的编译和运行的环境配置(一般不改)
window -- Preferences -- Java
编译环境:Compiler默认选中的就是最高版本。
运行环境:Installed JREs默认会找你安装的那个JDK。建议配置了Java的环境变量(不配找不到)。
问题:
低编译(编译的版本比较低),高运行(运行的版本比较高)。可以。
高编译,低运行。不可以。
建议,编译和运行的版本一致。
B:如何去掉默认注释?
window -- Preferences -- Java -- Code Style -- Code Templates--Code
选择你不想要的内容,通过右边Edit编辑。
注意:请只删除注释部分,不是注释部分的不要删除。
C:行号的显示和隐藏
显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
隐藏:把上面的动作再做一次。
D:字体大小及颜色
a:Java代码区域的字体大小和颜色:
window -- Preferences -- General -- Appearance -- Colors And Fonts --Java修改 -- Java Edit Text Font--edit进行修改
b:控制台
window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font
c:其他文件
window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font
E:窗体给弄乱了,怎么办?
window -- Reset Perspective
F:控制台找不到了,怎么办?
Window--Show View—Console
G:取消悬浮提示(将鼠标停留在某个类上所出现的提示信息)
window -- Preferences -- Java--Editor--Hovers。右边将Combined Hover勾去掉。
这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上,按F2即可。
###11.05_Java开发工具(Eclipse中内容辅助键的使用)(掌握)
A:Alt+/ 起提示作用
B:main+alt+/,syso+alt+/,给出其他提示,for+alt+/遍历数组
C:补充输出语句,选中需要输出的部分,alt+/选择最后一项即可
C:定义自己的alt + /
windows--perference-Java-Editor-Templates--New
###11.06_Java开发工具(Eclipse中快捷键的使用)(掌握)
A:新建 ctrl + n
B:格式化 ctrl+shift+f
C:导入包 ctrl+shift+o
D:注释 ctrl+/(单行的注释和取消),ctrl+shift+/(多行注释),ctrl+shift+\(取消多行注释)
E:代码上下移动 选中代码alt+上/下箭头
F:查看源码 选中类名(F3或者Ctrl+鼠标点击)
G:查找具体的类 ctrl + shift + t,输入要查找的类的名称-->确定
H:查找具体类的具体方法 ctrl + o
I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法
J:删除代码 ctrl + d
K:抽取方法alt + shift + m
L:改名alt + shift + r(类名,方法名,变量名)
###11.07_Java开发工具(Eclipse中如何提高开发效率)(掌握)
alt + shift + s -->c(生成无参构造,或者alt+/) -->o(生成有参构造)-->r(set和get方法)
A:自动生成构造方法
B:自动生成get/set方法
案例:生成标准的Person类
package com.heima.bean;
?
public class Person extends Object{
?
private String name;
private int age;
?
public Person() { //alt + shift + s 再 + c 生成空参构造
super();
}
?
public Person(String name, int age) { //alt + shift + s 再 + o 根据本地字段(成员变量)生成有参构造
super();
this.name = name;
this.age = age;
}
?
public String getName() { //alt + shift + s 再 + r 生成get和set方法
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
this.age = age;
}
?
}
###11.08_Java开发工具(Eclipse中一个标准学生类及其测试)(掌握)
A:案例演示
用Eclipse实现标准学生类及其测试
案例:标准学生类及测试类
package com.itheima.bean;
?
public class Student {
private String name;
private int age;
?
public Student() {
?
}
?
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
this.age = age;
}
?
}
package com.itheima.eclipse;
?
import com.itheima.bean.Student;
?
public class StudentTest {
public static void main(String[] args) {
Student stu = new Student("张三", 30);
System.out.println(stu.getName()+"....."+stu.getAge());
}
}
###11.09_Java开发工具(Eclipse中接口抽象类具体类代码体现)(掌握)
A:案例演示
用Eclipse实现接口抽象类具体类代码
案例:Animal(重新建立一个新的项目Animal)
//抽象类Animal
package com.itheima.animal;
?
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
//子类Cat
package com.itheima.animal;
?
public class Cat extends Animal {
?
@Override
public void eat() {
System.out.println("猫吃鱼");
}
?
@Override
public void sleep() {
System.out.println("侧着睡");
}
?
}
注意:此时在day11项目中无法直接使用上面的Cat类因为不是同一个项目, 需要用到下面的知识点,生成jar包
按照下面的方法生成jar包,并复制到day11项目中,但是发现在写测试类时,仍然不能使用,因为jar包里放的都是class文件,得告诉day11项目jar的classpath的路径,之前没告诉过,因为之前都是把当前路径作为classpath,现在这些文件得重新告诉Eclipse它们的classpath,方法右键/jar包/Build Path/Add to Build Path/(将添加的jar包,添加到classpath,当jar包变成像奶瓶一样的东西证明已经导入进来了),在项目中由于jar包比较多,不是简单的赋值到项目中并添加到构建路径就可以的,需要对jar包进行管理,右键项目/new/fold/输入名称为lib,
然后将jar包放入lib中重新进行Build Path
//在day11项目中对上面的内容进行测试
package com.itheima.eclipse;
?
import com.itheima.animal.Cat;
?
public class AnimalTest {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.sleep();
}
}
###11.10_Java开发工具(Eclipse中如何生成jar包并导入到项目中)(了解)
A:jar是什么?
jar是多个class文件的压缩包。
B:jar有什么用?
用别人写好的东西
C:打jar包
选中项目--右键--Export--Java--Jar--自己指定一个路径和一个名称--Finish
D:导入jar包
复制到项目路径下并添加至构建路径。
###11.11_Java开发工具(Eclipse中如何删除项目和导入项目)(掌握)
A:删除项目
选中项目 – 右键 – 删除
从项目区域中删除
从硬盘上删除
B:导入项目
在项目区域右键找到import
找到General,展开,并找到
Existing Projects into Workspace
点击next,然后选择你要导入的项目
注意:这里选择的是项目名称
###11.12_Java开发工具(Eclipse中断点调试的基本使用)(了解)
A:Debug的作用
调试程序
查看程序执行流程
B:如何查看程序执行流程
什么是断点:
就是一个标记,从哪里开始。
如何设置断点:
你想看哪里的程序,你就在那个有效程序的左边双击即可。
在哪里设置断点:
哪里不会点哪里。
目前:我们就在每个方法的第一条有效语句上都加。
如何运行设置断点后的程序:
右键 -- Debug as -- Java Application
看哪些地方:
Debug:断点测试的地方
在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。
Variables:查看程序的变量变化
ForDemo:被查看的源文件
Console:控制台
如何去断点:
a:再次双击即可
b:找到Debug视图,Variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉。
案例:
package com.itheima.debug;
?
public class Demo1 {
public static void main(String[] args) {
int sum = 0;
for(int i=0;i<6;i++) {
sum+=i;
}
System.out.println("sum="+sum);
}
}
断点调试图如下:
###11.13_Java开发工具(Eclipse查看Java中参数传递问题)(了解)
A:断点演示
断点查看Java中参数传递问题
案例:
package com.itheima.debug;
?
public class Demo2 {
?
public static void main(String[] args) {
//第一部分,先演示这部分,测试上面快捷键的功能
/
int a = 10;
int b = 20;
System.out.println("a:" + a + ",b:" + b);
change(a, b);
System.out.println("a:" + a + ",b:" + b);/
//第二部分,再演示这部分,进行同样的测试
int[] arr = { 1, 2, 3, 4, 5 };
change(arr);
System.out.println(arr[1]);
?
}
?
public static void change(int a, int b) {
System.out.println("a:" + a + ",b:" + b);
a = b;
b = a + b;
System.out.println("a:" + a + ",b:" + b);
}
?
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] % 2 == 0) {
arr[x] += 2;
}
?
}
?
}
?
}
###11.14_常见对象(API概述)(了解)
A:API(Application Programming Interface)
应用程序编程接口
B:Java API
就是Java提供给我们使用的类,这些类将底层的实现封装了起来,
我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。
###11.15_常见对象(Object类的概述)(了解)
A:Object类概述
类层次结构的根类
所有类都直接或者间接的继承自该类
B:构造方法
public Object()
回想面向对象中为什么说:
子类的构造方法默认访问的是父类的无参构造方法
###11.16_常见对象(Object类的hashCode()方法)(了解)
A:案例演示
public int hashCode()
a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
案例:
package com.itheima.object;
?
import com.itheima.bean.Student;
?
public class Demo1_HashCode {
public static void main(String[] args) {
// 创建Object类型的对象object
Object object = new Object();
// 获取object的hashCode,按住ctrl+单击/hashCode()方法查看其源码
// 返现hashCode()是个抽象方法,但是前面用native(本地)修饰符修饰
// 意思是借助本地系统资源帮我们计算的hashCode值,现在jvm是在window系统中运行的,就会借助window系统计算hashCode值
?
int hashCode = object.hashCode();
System.out.println(hashCode);
?
Student s1 = new Student("张三", 23);
Student s2 = new Student("李四", 24);
// ctrl+alt+向下的箭头,快速复制当前行
// 有的电脑上按照上面的快速复制方式会讲屏幕倒过来,解决方法:右击屏幕/图形选项/快捷键,选择禁用
System.out.println(s1);
System.out.println(s2);
?
}
}
###11.17_常见对象(Object类的getClass()方法)(在反射的时候掌握)
A:案例演示
public final Class getClass()
a:返回此 Object 的运行时类。
b:可以通过Class类中的一个方法,获取对象的真实类的全名称。
public String getName()
小写的class是用来描述类的信息的(属性和行为)
大写的Class是用来描述编译后生成的字节码文件的(.class文件)
案例:
package com.itheima.object;
?
import com.itheima.bean.Student;
?
public class Demo2_GetClass {
public static void main(String[] args) {
Student student = new Student("张三",24);
Class clazz = student.getClass(); //获取该对象的字节码文件
String name = clazz.getName(); //获取名称:即类的全名称
System.out.println("name="+name);
}
}
###11.18_常见对象(Object类的toString()方法)(掌握)
A:案例演示
public String toString()
a:返回该对象的字符串表示。
public Stirng toString() {
return name + "," + age;
}
b:它的值等于:
getClass().getName() + "@" + Integer.toHexString(hashCode())
c:由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。
B:最终版
自动生成
案例:
package com.itheima.object;
?
import com.itheima.bean.Student;
?
public class Demo3_ToString {
/
运行结果:com.itheima.bean.Student@40671416
通过查看源码(ctrl+单击"toString方法")返现,上述结果中@符号前是给对象所属类的全名称,
.@符号后面是该对象hashCode值的十六进制的字符串表现形式,toString()源码如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
问题:在实际使用时直接打印出类全名称@hashCode值的十六进制的字符串表现形式,是没有意义的
而实际上我们是想看到对象的具体的详细信息,这样就需要子类重写父类的toString方法
重写toString方法的意义用用:可以更方便显示属性值,而getXxx()方法获取值可以进行其它运算,可以显示或做其它操作
@param args
/
public static void main(String[] args) {
//在重写toString方法前后分别运行改程序,看结果
Student student = new Student("张三",23);
//String str = student.toString();
//System.out.println(str);
//上面的两句话,可以写成下面的一句
System.out.println(student.toString());
System.out.println(student); //直接打印对象的引用,默认调用toString方法
System.out.println("我的姓名是:"+student.getName()+",我的年龄是:"+student.getAge());
}
}
重写Student类的toString方法:
package com.itheima.bean;
?
public class Student {
private String name;
private int age;
?
public Student() {
?
}
?
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
this.age = age;
}
?
/@Override
public String toString() {
return "我的姓名是:" + name + ", 我的年龄是:" + age;
}/
//上面的toString是自己写的,也可以让eclipse自动生成,alt+shift+s ->s->enter
@Override
public String toString() { //重写
return "Student [name=" + name + ", age=" + age + "]";
}
?
}
###11.19_常见对象(Object类的equals()方法)(掌握)
A:案例演示
a:指示其他某个对象是否与此对象“相等”(判断两个对象是否相等)。
b:默认情况下比较的是对象的引用是否相同。
c:由于比较对象的引用没有意义,一般建议重写该方法。
案例:
package com.itheima.object;
?
import com.itheima.bean.Student;
?
public class Demo4_Equals {
/
equals方法:比较两个对象是否相等,下面是Object中的equals方法,比较的是地址值,没有什么意义
public boolean equals(Object obj) {
return (this == obj);//是调用的对象与传入的对象的比较,比较的是地址值
}
思考:equals方法比较两个对象的地址值是没有意义的,需要重写,因为在开发中通常比较的是对象中的属性值,
我们认为相同属性认为是同一个对象,这要需要在Student类中需要重写equals方法
@param args
/
public static void main(String[] args) {
//观察重写equals方法前后的结果
Student s1 = new Student("张三",23);
Student s2 = new Student("张三",23);
boolean b = s1.equals(s2); //比较两个对象是否相等
//当Student类没有重写equals方式时,下面两个输出都是false
System.out.println(s1 == s2);
System.out.println(b);
}
}
重写Student类中的equals方法:
package com.itheima.bean;
?
public class Student {
private String name;
private int age;
?
public Student() {
?
}
?
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
this.age = age;
}
?
@Override
public boolean equals(Object obj) {
//认为当姓名相同并且年龄也相同时为同一对象
//所以要先比较姓名是否相同,而姓名是String类型,通过查看api发现String类型重写了equals方法,
//而且比较的是字符串中的字符序列是否相同,正好符合要求,可以直接使用
/
Student s = (Student)obj;
return this.name.equals(s.name)&&this.age==s.age;//age是基本数据类型,不能直接调用方法
/
if(obj instanceof Student){
Student s = (Student)obj;
return this.name.equals(s.name)&&this.age==s.age;
}
return false;
}
?
}
###11.20_常见对象(==号和equals方法的区别)(掌握)
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
