Java基础-11总结Eclipse使用,API,Object类

简介: 你需要的是什么,直接评论留言。 获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦) 还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:Eclipse的概述使用(掌握) 1:Eclipse的安装 2:用

你需要的是什么,直接评论留言。

获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦)

还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读

学习交流请加Java帮帮交流QQ群553841695

分享是一种美德,分享更快乐!


1:Eclipse的概述使用(掌握)

1:Eclipse的安装


2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字


A:创建项目

B:在src目录下创建包。cn.itcast

C:在cn.itcast包下创建类。HelloWorld

D:在HelloWorld下有一个方法。public static void main(String[] args) {}

E:在main方法中有一个输出语句。System.out.println("你的名字");

3:Eclipse空间的基本配置

A:程序的编译和运行的环境配置(一般不改)

window -- Preferences -- Java

编译环境:Compiler 默认选中的就是最高版本。

运行环境:Installed JREs 默认会找你安装的那个JDK。建议配置了Java的环境变量。

问题:

低编译,高运行。可以。

高编译,低运行。不可以。

建议,编译和运行的版本一致。


B:如何去掉默认注释?

window -- Preferences -- Java -- Code Style -- Code Templates

选择你不想要的内容,通过右边Edit编辑。

注意:请只删除注释部分,不是注释部分的不要删除。

C:行号的显示和隐藏

显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。

隐藏:把上面的动作再做一次。

D:字体大小及颜色

a:Java代码区域的字体大小和颜色:

window -- Preferences -- General -- Appearance -- Colors And Fonts -- Java修改 -- Java Edit Text Font

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

4:常用快捷键

A:格式化  ctrl+shift+f

B:导入包  ctrl+shift+o

如果该类仅仅在一个包中有,就自己显示了

如果该类在多个包中有,会弹出一个框框供你选择

C:注释  

单行:注释 ctrl+/,取消注释再来一次。

多行:ctrl+shift+/,ctrl+shift+\

D:代码上下移动 

选中代码alt+上/下箭头

E:查看源码

选中类名(F3或者Ctrl+鼠标点击)

5:如何提高开发效率

A:自动生成构造方法

a:无参构造方法 在代码区域右键--source--Generate Constructors from Superclass

b:带参构造方法 在代码区域右键--source--Generate Constructors using fields.. -- finish

B:自动生成getXxx()/setXxx()方法

在代码区域右键--source--Generate Getters and Setters...

提供了对应的快捷键操作。

alt+shift+s 

按下带有下划线的那个字母即可。

C:如何继承抽象类和实现接口。

D:Override的作用

表示该方法是重写父类的。如果方法声明和父类不匹配,就会报错。

6:通过讲解的快捷键和提高开发效率的一些内容完成如下内容

自定义学生类:Student

成员变量;

姓名

年龄

构造方法:

无参

带参

成员方法:

getXxx()/setXxx()

在给出一个show()方法,显示类的所有成员信息。

然后,写一个测试类,对学生的代码进行测试。

StudentDemo

package cn.itcast_01;


public class Student {

// 姓名

private String name;

// 年龄

private int age;


public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}


public Student() {

super();

}


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;

}


public void show() {

System.out.println("姓名:" + name + ",年龄:" + age);

}

}

package cn.itcast_01;


/*

 * 测试类

 */

public class StudentDemo {

public static void main(String[] args) {

// 创建对象

Student s1 = new Student();

s1.setName("风清扬");

s1.setAge(30);

System.out.println(s1.getName() + "---" + s1.getAge());

s1.show();


// 创建对象

Student s2 = new Student("林青霞", 27);

System.out.println(s2.getName() + "---" + s2.getAge());

s2.show();

}

}



7:删除项目和导入项目

删除项目

选中项目 – 右键 – 删除

从项目区域中删除

从硬盘上删除

导入项目

在项目区域右键找到import

找到General,展开,并找到

Existing Projects into Workspace

点击next,然后选择你要导入的项目

注意:这里选择的是项目名称

8:要注意的几个小问题

如何查看项目所在路径

选中 -- 右键 -- Properties -- Resource -- Location

导入项目要注意的问题

项目区域中不可能出现同名的项目(新建或者导入)

自己随意建立的文件夹是不能作为项目导入的

修改项目问题

不要随意修改项目名称

如果真要修改,不要忘记了配置文件.project中的

<name>把这里改为你改后的名称</name>


9:大家接收文件的注意事项

A:专门建立一个文件夹用于接收项目,不要随意放置。

B:同一个项目再次接收的时候,先去存放目录把原始项目删除,然后重新存储,最后刷新项目即可。

C:每天对照我写的项目,自己也创建一个练习项目

举例:我的项目名称 day11_eclipse

  你就创建一个项目名称 day11_eclipse_test

10:Eclipse中代码的高级(Debug)调试

作用:

调试程序

查看程序执行流程

如何查看程序执行流程

要想看程序流程,就必须设置断点。

什么是断点:

就是一个标记,从哪里开始。

如何设置断点:

你想看哪里的程序,你就在那个有效程序的左边双击即可。

在哪里设置断点:

哪里不会点哪里。

目前:我们就在每个方法的第一条有效语句上都加。

如何运行设置断点后的程序:

右键 -- Debug as -- Java Application

看哪些地方:

Debug:断点测试的地方

在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。

Variables:查看程序的变量变化

ForDemo:被查看的源文件

Console:控制台

如何去断点:

a:再次双击即可

b:找到Debug视图,Variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉。

package cn.itcast_03;


/*

 * 通过debug查看程序执行流程

 * 请大家也做一遍。

 */

public class ArgsDemo {

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;

}

}

}

}



package cn.itcast_03;


public class ForDemo {

public static void main(String[] args) {

// 定义求和变量

int sum = 0;


for (int x = 1; x < 6; x++) {

sum += x;

}


System.out.println("sum:" + sum);

}

}

2:API的概述(了解)

(1)应用程序编程接口。

(2)就是JDK提供给我们的一些提高编程效率的java类。


3:Object类(掌握)

(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。

(2)Object类的构造方法有一个,并且是无参构造

这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造

(3)要掌握的方法:

A:toString()

返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。

这个表示其实是没有意义的,一般子类都会重写该方法。

如何重写呢?过程我也讲解过了,基本上就是要求信息简单明了。

但是最终还是自动生成。

package cn.itcast_02;


public class Student {

private String name;

private int age;


public Student() {

super();

}


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 "Student [name=" + name + ", age=" + age + "]";

}


// @Override

// public String toString() {

// // return super.toString();

// // return "hello";

// return "姓名:" + name + ",年龄:" + age;

// }

}


package cn.itcast_02;


/*

 * public String toString():返回该对象的字符串表示。

 * 

 * Integer类下的一个静态方法:

 *  public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串

 * 

 * 这个信息的组成我们讲解完毕了,但是这个信息是没有任何意义的。所以,建议所有子类都重写该方法。

 * 怎么重写呢?

 *  把该类的所有成员变量值组成返回即可。

 * 重写的最终版方案就是自动生成toString()方法。

 * 

 * 注意:

 *   直接输出一个对象的名称,其实就是调用该对象的toString()方法。

 */

public class StudentDemo {

public static void main(String[] args) {

Student s = new Student();

System.out.println(s.hashCode());

System.out.println(s.getClass().getName());

System.out.println("--------------------");

System.out.println(s.toString());// cn.itcast_02.Student@42552c

System.out.println("--------------------");

// toString()方法的值等价于它

// getClass().getName() + '@' + Integer.toHexString(hashCode())

// this.getClass().getName()+'@'+Integer.toHexString(this.hashCode())


// cn.itcast_02.Student@42552c

// cn.itcast_02.Student@42552c


System.out.println(s.getClass().getName() + '@'

+ Integer.toHexString(s.hashCode()));


System.out.println(s.toString());


// 直接输出对象的名称

System.out.println(s);

}

}


B:equals()

比较两个对象是否相同。默认情况下,比较的是地址值是否相同。

而比较地址值是没有意义的,所以,一般子类也会重写该方法。

重写过程,我也详细的讲解和分析了。

但是最终还是自动生成。


package cn.itcast_03;


public class Student {

private String name;

private int age;


public Student() {

super();

}


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) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

// @Override

// public boolean equals(Object obj) {

// // return true;

// //这里要改进,根据这里比较的成员变量来决定返回true还是false

// //这里其实要比价的就是name和age

// //但是,name是String类型的,而String是引用类型的,所以,在这里不能直接用==比较,应该用equals()比较

// //String的equals()方法是重写自Object类的,比较的是字符串的内容是否相同

// //this -- s1

// //obj -- s2

// //我们要使用的是学生类的特有成员变量,所以要向下转型

// Student s = (Student)obj; //s -- obj -- s2;

// if(this.name.equals(s.name) && this.age == s.age) {

// return true;

// }else {

// return false;

// }

// }

// @Override

// public boolean equals(Object obj) {

// //为了提高效率

// if(this == obj){

// return true;

// }

//

// //为了提供程序的健壮性

// //我先判断一下,obj是不是学生的一个对象,如果是,再做向下转型,如果不是,直接返回false。

// //这个时候,我们要判断的是对象是否是某个类的对象?

// //记住一个格式:对象名 instanceof 类名

// //表示:判断该对象名是否是该类名一个对象

// if(!(obj instanceof Student)){

// return false;

// }

// //如果是就继续

//

// Student s = (Student)obj;

// //System.out.println("同一个对象,还需要向下转型并比较吗?");

// return this.name.equals(s.name) && this.age == s.age;

// }

}


package cn.itcast_03;


/*

 * public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。 

 * 这个方法,默认情况下比较的是地址值。比较地址值一般来说意义不大,所以我们要重写该方法。

 * 怎么重写呢?

 *  一般都是用来比较对象的成员变量值是否相同。

 * 重写的代码优化:提高效率,提高程序的健壮性。

 * 最终版:

 *  其实还是自动生成。

 * 

 * 看源码:

 *  public boolean equals(Object obj) {

 *  //this - s1

 *  //obj - s2

 *        return (this == obj);

 *    }

 * 

 * ==:

 *  基本类型:比较的就是值是否相同

 *  引用类型:比较的就是地址值是否相同

 * equals:

 *  引用类型:默认情况下,比较的是地址值。

 *  不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同

 */

public class StudentDemo {

public static void main(String[] args) {

Student s1 = new Student("林青霞", 27);

Student s2 = new Student("林青霞", 27);

System.out.println(s1 == s2); // false

Student s3 = s1;

System.out.println(s1 == s3);// true

System.out.println("---------------");


System.out.println(s1.equals(s2)); // obj = s2; //false

System.out.println(s1.equals(s1)); // true

System.out.println(s1.equals(s3)); // true

Student s4 = new Student("风清扬",30);

System.out.println(s1.equals(s4)); //false

Demo d = new Demo();

System.out.println(s1.equals(d)); //ClassCastException


}

}


class Demo {}



(4)要了解的方法:

A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。

B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解

C:finalize() 用于垃圾回收,在不确定的时间

D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。

package cn.itcast_04;


public class Student implements Cloneable {

private String name;

private int age;


public Student() {

super();

}


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

protected Object clone() throws CloneNotSupportedException {

return super.clone();

}

}



package cn.itcast_01;


/*

 * Object:类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

 * 每个类都直接或者间接的继承自Object类。

 * 

 * Object类的方法:

 *  public int hashCode():返回该对象的哈希码值。

 *  注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。

 *             你可以理解为地址值。

 * 

 * public final Class getClass():返回此 Object 的运行时类

 * Class类的方法:

 * public String getName():以 String 的形式返回此 Class 对象所表示的实体

 */

public class StudentTest {

public static void main(String[] args) {

Student s1 = new Student();

System.out.println(s1.hashCode()); // 11299397

Student s2 = new Student();

System.out.println(s2.hashCode());// 24446859

Student s3 = s1;

System.out.println(s3.hashCode()); // 11299397

System.out.println("-----------");


Student s = new Student();

Class c = s.getClass();

String str = c.getName();

System.out.println(str); // cn.itcast_01.Student

//链式编程

String str2  = s.getClass().getName();

System.out.println(str2);

}

}


package cn.itcast_04;


/*

 * protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。

 * protected Object clone():创建并返回此对象的一个副本。

 * A:重写该方法

 *

 *  Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。 

 *   这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。

 */

public class StudentDemo {

public static void main(String[] args) throws CloneNotSupportedException {

//创建学生对象

Student s = new Student();

s.setName("林青霞");

s.setAge(27);

//克隆学生对象

Object obj = s.clone();

Student s2 = (Student)obj;

System.out.println("---------");

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

//以前的做法

Student s3 = s;

System.out.println(s3.getName()+"---"+s3.getAge());

System.out.println("---------");

//其实是有区别的

s3.setName("刘意");

s3.setAge(30);

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

System.out.println(s3.getName()+"---"+s3.getAge());

}

}


(5)两个注意问题;

A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。

B:面试题 

==和equals()的区别?

A:==

基本类型:比较的是值是否相同

引用类型:比较的是地址值是否相同

B:equals()

只能比较引用类型。默认情况下,比较的是地址值是否相同。

但是,我们可以根据自己的需要重写该方法。

Java帮帮今日头条号



Java帮帮微信公众号



Java帮帮交流群


目录
相关文章
|
19小时前
|
XML JSON Java
作为所有类的顶层父类,没想到Object的魔力如此之大!
在上一篇博文中我们提到了Java面向对象的四大特性,其中谈及“抽象”特性时做了一个引子,引出今天的主人公Object,作为所有类的顶级父类,Object被视为是James.Gosling的哲学思考,它高度概括了事务的自然与社会行为。
28 13
|
4天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
23 11
|
5天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
8天前
|
存储 安全 Java
说说Java 8 引入的Stream API
说说Java 8 引入的Stream API
11 0
|
8天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【4月更文挑战第16天】本文将介绍Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁、易读。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,从而使代码更加简洁、高效。本文将通过实例代码详细讲解这两个新特性的使用方法和优势。
|
9天前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
|
12天前
|
存储 Java 关系型数据库
掌握Java 8 Stream API的艺术:详解流式编程(一)
掌握Java 8 Stream API的艺术:详解流式编程
46 1
|
21天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
15天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
22天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。

推荐镜像

更多