集成开发环境
讲究一站式开发,提示功能,自动纠错功能,
让软件开发更简单,更高效。
没有IDE工具,需要配置环境变量,手动将java源文件编译生成class字节码文件。
java源程序出错没有提示。
有IDE工具,不需要独立安装JDK,不需要手动配置环境变量,不需要使用javac命令对java源文件进行编译,java源文件编写语法出错后,马上提示。
不错的IDE推荐
eclipse (myeclipse) 免费 (收费)
intellij IDEA
NetBeans
JBuilder
myeclipse使用
workspace 工作区
打开后选择工作区,可以是之前的,也可以是新建工作区
选择工作区后,将来编写的java源文件,生成的class文件,都会在工作区找到,
在workspace中有一个文件夹: .metadata
在该文件存储了,当前myeclipse的工作状态
删除后,下次进入工作区,会是一个全新的开始
但是不会丢失源文件的。
面向对象封装性
面向对象三大特征: 封装 继承 多态
下面主要是封装
封装好处:
1.封装之后,看不到事物复杂的一面,只能看到简单的一面。 复杂性封装对外提供简单的操作入口。
eg: 照相机内部结构负载,但是对于使用者来说,操作非常便捷。
2. 封装之后,才会形成 真正的 独立体。
3. 封装就意味着 以后的程序可以重复使用。这个事物可以适应任何场合。
4. 封装了之后,对于事物本身提高了安全性。
package test3;
public class User {
int age;
String name;
}
package test3;
/*
对于user类来说,user属性存在外部程序可以随意访问,导致age属性不安全。
*/
public class Test {
public static void main(String[] args) {
//
User user = new User();
user.age = 20;
System.out.println("用户的年龄: " + user.age);
// 修改年龄
user.age = -100;//这里age属性完全暴露给外边,导致user属性不安全。
}
}
封装步骤:
1。 所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有的数据只能在本类中访问。
2。 对外提供简单的操作入口,以后外部程序要想访问get,必须通过这些简单入口进行访问。
修改属性值 set
获取属性值 get
3。 set 方法命名规范
public void set + 属性名首字母大写(形参){
age = a;
}
4。 get 方法命名规范
public int getAge(){
return age;
}
setter and getter方法没有static关键字
调用 有static关键字修饰的方法 类名.方法名(实参);
调用 没有static关键字修饰的方法 引用.方法名(实参);
package test3;
public class User {
private int age;
//set方法没有返回值,因为set方法只负责修改数据
public void setAge(int age){
if(age < 0 || age > 150){
System.out.println("对不起,您输入的年龄不合法!");
return;
}
this.age = age;// java就近原则
}
public int getAge(){
return age;
}
}
package test3;
/*
*/
public class Test {
public static void main(String[] args) {
User user = new User();
//修改
user.setAge(100);
}
}
封装例子2:
消费者
package test3;
public class Customer {
private int id;
private String name;
private int age;
private String addr;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
package test3;
/*
*/
public class Test {
public static void main(String[] args) {
Customer c = new Customer();
//操作入口变成了只能通过set 和 get来访问
c.setId(100);
c.setName("zs");
c.setAge(20);
c.setAddr("Beijing");
System.out.println(c.getId());
System.out.println(c.getName());
System.out.println(c.getAge());
System.out.println(c.getAddr());
}
}
构造方法
java类中的构造方法:
1。构造方法 又被称为构造函数,构造器 Constructor
2。构造方法语法结构:
[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}
3。 普通方法语法结构:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
4。 对于构造方法来说,返回值类型 不需要指定,并且也不能写void
只要写上void,那么这个方法就变成了普通方法。
构造方法名 必须 和 类名 保持一致。
5。 构造方法作用:
通过构造方法调用 可以 创建对象。
6。 构造方法应该怎么调用
new 构造方法名(实参列表)
普通方法调用:
方法修饰符有static:类名.方法名(实参列表) or
方法修饰符无static: 引用.方法名(实参列表)
7。 单行注释 command + /
多行注释 command + shift + /
8。 构造方法是有返回值类型的,就是它本身,但是不能写。
9。 当一个类中没有任何构造方法的话,系统默认给该类提供一个构造方法,这个构造方法称之为 缺省构造器。
10。 当一个类 显示的将构造方法定义出来了,那么系统则不在默认为这个类提供缺省构造器。建议开发中,手动给当前类 提供 手动为打不过全部参数构造的 方法, 因为 五参数构造方法 太常用了。
package test3;
/*
*/
public class Test {
public static void main(String[] args) {
// 创建User对象
// 调用User类的构造方法完成对象的创建
// 每一个构造方法结束以后,都有一个返回值,但是这个return值不需要我们写,并且返回值的类型是构造方法所在类的类型。
// 构造方法的返回值类型 是本身,所以返回值类型不需要写。
User u = new User();
}
}
11。 构造方法 支持多个方法重载机制。在一个类中编写多个构造方法。
第一个例子:
package test3;
public class User {
public User(){
System.out.println("User's Defalut Constructor ");
}
// 有参数的构造方法
public User(int i){
}
}
package test3;
public class User {
public User(){
System.out.println("User's Defalut Constructor ");
}
}
第二个例子:
package test3;
public class User {
public User(){
System.out.println("User's Defalut Constructor ");
}
// 有参数的构造方法
public User(int i){
System.out.println("带有int类型的构造器");
}
public User(int i, String name){
System.out.println("带有int和string类型的构造器");
}
}
public class Test {
public static void main(String[] args) {
// 创建User对象
// 调用User类的构造方法完成对象的创建
// 每一个构造方法结束以后,都有一个返回值,但是这个return值不需要我们写,并且返回值的类型是构造方法所在类的类型。
// 构造方法的返回值类型 是本身,所以返回值类型不需要写。
User user = new User();
User user2 = new User(1);
User user3 = new User(1,"zs");
}
}
调用方法 带static 和 不带static
总结来说,就是有static就可以直接调用,无static需要通过类new一个对象才能调用。
如果类没构造方法,那么系统默认提供一个无参数构造器。
public class Test {
public static void main(String[] args) {
//调用带static的方法
Test.doSome();
doSome();
//调用不带static的方法
// doOther在Test类当中,所以需要创建Test对象。
// 创建Test对象,调用无参数构造方法。
Test t = new Test(); //一个类当中没有任何构造方法的话,系统提供一个默认的无参数构造器。
t.doOther();
}
public static void doSome(){
System.out.println("do some!");
};
public void doOther(){
System.out.println("do other");
}
}
构造方法的作用:
1。创建对象
2。创建对象的同时,初始化实例空间。 给实例变量赋值。
实例变量 存储在 java内存 的 堆内存 里面。
成员变量 之 实例变量, 属于对象界别的变量,必须先有对象 才能有实例变量。
类加载 只加载了代码片段, 还未创建对象,完成初始化。
系统在默认赋值时候,在构造方法执行过程当中完成的赋值。
public class Account {
// 账号
private String actno; //实例变量,对象变量,也就是说必须先有对象才能有实例变量。
// 余额
private double balance;
// 无参数构造器
public Account(){
// 初始化实例变量的内存空间
actno = null;
balance = 0.0;
}
public Account(String s){
actno = s;
}
public Account(double d){
// actno = s;
balance = 10000;
}
public Account(String s, double d){
actno = s;
balance = d;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
public class Test {
public static void main(String[] args) {
//创造对象
Account act = new Account();
act.setActno("111");
int i = 10;
System.out.println("Account number is " + act.getActno());
System.out.println("The money in account is " + act.getBalance());
Account act2 = new Account("110");
System.out.println("Account number is " + act2.getActno());
System.out.println("The money in account is " + act2.getBalance());
Account act3 = new Account(10000.0);
System.out.println("Account number is " + act3.getActno());
System.out.println("The money in account is " + act3.getBalance());
Account act4 = new Account("act-01",1100.0);
System.out.println("Account number is " + act4.getActno());
System.out.println("The money in account is " + act4.getBalance());
}
}
快捷键: shift + ctrl 可以同时选中多个目标