流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:69,691 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之面向对象(封装、this关键字、构造方法、包管理)

Java l, xy 362℃ 0评论

  1.   java

(1)      优点

1           防止类重名的问题

2           便于分类管理类

(2)      语法:

1           定义包关键字:

1)         Package

2)         Package  包名;

2           导包关键字

1)         Import 全类名 --导入一个类; 或者 import 包名.*; --- 导入包下的所有类(不推荐)

2)         例如:

  1. Import  java.util.Scanner;
  2. 静态导入  import static 包名.类名.*;  ---导入类下所有的静态方法
  3. 静态导入  import static 包名.类名.静态方法名/静态变量名;---导入单个静态

 

3)         特点:

  1. 导包的位置在包定义的下面,类定义的上面;也就是说在类定义和包定义之间。
  2. 一个类中可以有多个导包语句,并且没有顺序要求

package cn.cupcat;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* 处理业务逻辑
* 没有处理异常
*/
public class Service {

}

4)         导入不同包下相同类的情况

  1. 一般使用在类中使用全类名来区分

 

(3)      创建方式(在eclipse中)

1           方式一:项目上右键 --> new --> package ---> 输入包名 ---> 确定

2           方式二:项目上右键 --> new -->class ---> 在对话框中package中填入包名,输入类名 ---> 确定 。 在创建class的同时也创建了包。

3           方式三:先创建class,在修改包,让eclipse提示修改错误,帮助我们创建包(不推荐)

(4)      包的命名:

1           命名规则

1)         符合变量的命名规则

2)         除了①以外,还可以使用英文圆点(.

2           命名规范

1)         包名一般全小写

2)         使用域名倒置的命名

  1. 例如: com.baidu.xxx
  2. 例如:公司域名.部门名.项目名.业务包名

 

(5)      包的注意事项

1           Package的定义java文件的上面

2           在一个java文件中只能有一个package语句 ,否则报错

 

  1.   访问修饰符

修饰符\访问范围

本类中

同一包下

不同包子类

不通报

private

 

 

 

 

默认(不写)

 

 

 

 

protected

 

 

 

 

public

 

 

 

 

 

说明: 背景绿色代表可以访问

 

在外部类中,只能使用public 、 默认来修饰类

在内部类中,都可以用来修饰类

  1.   封装

(1)      理解:

1           广义:包、类、方法等都是封装的体现

2           狭义:在类中对属性的封装。

(2)      优点

1           封装了类中的内部细节,对外提供共有的访问方法。

2           在一定程度提高了数据的安全性(可以在方法中对数据就行控制处理)

(3)      狭义封装的步骤:

1           属性私有化(类中的属性使用private关键字修饰)

2           提供公有的setter方法(提供对属性的赋值,控制赋值过程,对不合格条件的赋值进行过滤,保证数据的安全性)对属性赋值

3           提供共有getter方法让调用者访问



package cn.cupcat;

/**
* 保存账单详情
* */
public class FamilyAccount {
/**
* 余额
* */
private double balance;
/**
* 是否是收入
* */
private boolean isEarn;
/**
* 收入或者支出金额
* */
private double amount;
/**
* 说明
* */
private String remark;


public FamilyAccount(double balance, boolean isEarn, double amount, String remark) {
this.balance = balance;
this.isEarn = isEarn;
this.amount = amount;
this.remark = remark;
}

public void setBalance(double balance) {
this.balance = balance;
}

public double getBalance() {
return balance;
}

public boolean isEarn() {
return isEarn;
}

public void setEarn(boolean earn) {
isEarn = earn;
}

public double getAmount() {
return amount;
}

public void setAmount(double amount) {
this.amount = amount;
}

public String getRemark() {
return remark;
}

public void setRemark(String remark) {
this.remark = remark;
}

}
  1.   This关键字

(1)      代表:当前对象的引用;那个对象调用就代表那个对象,注意是对象而不是类

(2)      作用

1           解决成员变量和局部变量重名的问题

2           可以调用本类的构造方法

 

(3)      特点:

1           在类中对成员变量、成员方法的调用都是使用this,但是默认情况下是可以省略的。

2           如果当成员变量和局部变量重名是,可以显示使用this指定成员

(4)      注意事项

1           This 是 类名.this 的省略。


public class OuterClass {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.test();
}

public void test() {
System.out.println("this == OuterClass.this ? " + (this == OuterClass.this));
}
}

打印:this == OuterClass.this ? true

2           This不能在静态方法(static修饰的方法)中使用,因为此时对象还不存在

3           一个类中如果有成员内部类,并且成员内部类和该类都用相同的属性,则可以使用 类名.this.属性名 显示的指定使用该类的属性


/**
* 内部类演示this
*/
public class OuterClass {
private String name = "zxy";

public static void main(String[] args) {
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
inner.printName();
}

class InnerClass{
String name = "lxy";

public void printName(){
// 如果这里去掉 OuterClass.this,访问的时InnerClass的name,打印的时 lxy
System.out.println("name = " + OuterClass.this.name);
}
}
}
打印:name = zxy

4           This也可以调用父类的中的方法和属性,但是如果子类中有本类自己定义的属性和方法与父类有重名则会优先调用本类的属性和方法。因为子类继承了父类的属性和方法,就成了自己的了,而this正是代表本类对象,当然可以调用了。在调用的过程中遵循就近原则

 

  1.   构造器(构造函数)

1           概念:方法的名称和类型相同,没有返回值的方法

2           作用:

1)         可以创建对象

2)         创建对象的时候,对象进行初始化
 

3           特点:

1)         构造方法没有返回值

2)         构造方法的方法名和类名相同

3)         构造方法可以创建对象,使用new 构造器(【参数列表】)来调用,调用一次创建一个对象;

 

4)         构造方法的默认修饰符与类的修饰符相同

5)         构造方法内可以调用其他构造方法、或者成员方法、成员变量

6)         构造方法在一行隐式有一条super() 语句

7)         构造方法也可以重载

8)         构造器调用:

  1. 外部使用new 调用

a)         New 类名(【参数列表】);

  1. 类内调用

a)         This

b)        Super

 

 

4           注意事项:

1)         当一个类中没有显示的声明构造方法的时候,编译器会自动创建一个修饰符类的修饰符相同的无参构造方法。当我们显示的声明构造方法以后,默认的构造方法将不存在。 


/**
*
*/
class Person {

private String name;
private int age;
private double height;

//省略getter setter

public Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
}


public class Demo {
public static void main(String[] args) {
//编译报错,Person类中没有无参的构造方法
Person person = new Person();
}
}

2)         如果父类中显示的定义了有参的构造方法(没有定义显示无参的构造方法),子类的构造方法中如果没有显示调用父类有参构造方法,将会编译报错。


package cn.cupcat;

public class Person {
private String name;
private int age;
private double height;

public Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
}




package cn.cupcat;

// 编译报错:默认构造是默认调用父类无参构造,但是父类中没有找到;所以报错;
public class Student extends Person {

}

3)         构造器的调用只能被构造器调用,并且只能放在构造器的第一行。并且只能调用一次。

演示没有方法第一行


package cn.cupcat;


public class Student {

private int age;
private String name;


public Student(String name) {
this.name = name;
}

public Student(String name, int age) {
this.age = age;
// 编译报错,因为this调用构造方法必须在第一行
this(name);
}

// 省略setter、getter
}

  

    演示多次调用:


public Student() {
}

public Student(String name) {
this.name = name;
}

public Student(String name, int age) {
this(name);
this.age = age;
}

public Student(String name, int age, double height) {
// 编译错误,因为调用构造只能在第一行,两次调用的话,违反这条原则。
this();
this(name,age);
this.height = height;
}

 

  1.   JavaBean

(1)      前提:

1           类必须使用public修饰

2           必须有属性,并对属性进行封装

3           必须有无参构成方法

 

转载请注明:流年似水 » Java之面向对象(封装、this关键字、构造方法、包管理)

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址