7.27Java入门--->第六节 7.28面向对象--->第七节
1、方法声明和调用
方法--也叫函数,类的功能单元,方法必须定义在类中
语法--修饰符 返回值类型 方法名(参数类型 参数名){方法体 return返回值}
2、参数的传递
基本数据类型只有一种传递方式:值传递
将实际参数的副本传入方法内部,实际参数不会受方法内部的影响
引用数据类型:地址传值
直接影响实参的值
String 数据类型不可变
3、重载方法
同一个类中,同名,参数类型不同,参数个数不同
与返回值类型无关,只看参数列表
4-10面向对象
4、类和对象
类:是抽象的,是一个模板
对象:实实在在的
5、对象属性和方法
class 修饰类
属性:类中的成员变量
默认初始化:对象创建时,会有初始值,不同的属性有不同的初始值
显示初始化:创建完对象之后,使用对象的引用给属性赋值
方法:类中的成员方法(动作)
补充:局部变量只能定义在局部
6、Java内存管理和垃圾回收
jvm来进行垃圾回收
垃圾对象:内存中不再使用的对象
垃圾回收GC:jvm自动释放对象所占用的内存的机制
如果对象没有被引用变量引用时,称为垃圾,那么当前对象所占的内存空间含快被JVM回收
system.GC 督促JVM垃圾回收,但是没必要
7、类的封装(隐藏)
面向对象特性之一
该隐藏的隐藏,该暴露的暴露
public:公共的,共有的(可以用来修饰方法,类,在任何地方都可以访问)
peivate:私有的(只能在本类中使用)
protected:受保护的,可以修饰属性和方法(能被本包的类访问,其他包只能是此类的子类可以访问)
default:默认的,缺省的,包内作用域(只能被同一个包内的类访问)不可以挎包
封装
1.属性私有化
2.提供公共的get,set方法
信息的封装和隐藏
1.Java中通过对数据声明private,在提供public方法实现对属性的操作
2.隐藏一个类中不需要对外操作的细节
3.使用者只能通过对事先制定好的方法访问数据,可以方便加入控制逻辑,限制属性的不合理操作
4.便于修改,增加代码可维护性
8、this关键词
1.在方法内部使用,表示这个方法所属对象的引用
2.在构造器内部使用,表示构造器正在初始化的对象
3.this表示当前对象,可以调用属性,方法和构造器(this调用构造器时必须在第一行,至少有一个构造器不使用this)
4.this用来区分局部变量和实例变量
9、声明和使用构造器
1.注意事项与功能
创建对象的,给对象赋初值
具有与类名相同的名称
不生命返回值类型
不能被static、final、synchronized、abstract、native,不能返回return;
2.根据参数将构造器分类
1.系统默认提供一个空构造(默认的构造器和类的修饰符一样)
2.可以显示一个或多个构造器
3.Java中一个类至少有一个构造器
4.一旦显示构造器,系统不再提供默认构造器
5.一个类中可以有多个重载构造器
6.构造器不可以被继承
编写俩个类,TriAngle和TestAngle,其中TriAngle中声明私有的底边长base和高height
同时声明共有的方法访问私有变量,另一个类中使用这些方法计算三角形的面积
我没明白老师您是啥意思,我怎么也想不明白要表达啥意思
附我的理解
public class TriAngle { private double base; private double height; public double getBase() { return base; } public void setBase(double base) { this.base = base; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public TriAngle() { } public TriAngle(double base, double height) { this.base = base; this.height = height; } public double sum(){ System.out.println(base*height*3.14); return base*height*3.14; } } // // // // import java.util.Scanner; public class TestAngle { public static void main(String[] args) { TriAngle triAngle=new TriAngle(); Scanner scanner=new Scanner(System.in); triAngle.setBase(scanner.nextDouble()); triAngle.setHeight(scanner.nextDouble()); triAngle.sum(); } }
10、包的管理
package:当前类属于哪一个包
包名各个部分小写
全限定名,全类名
作为Java源文件的第一条语句,表示当前文件定义的类所在的包
2.作用
防止类的重名
控制访问权限
通常将功能相近的模块组织在同一个包中,用包来划分层级
使用定义在不同包下的类,使用import导包
在其他包下使用可以使用全限定名(com.xian.dao.user user=new com.xian.dao.user)
练习: (1)定义Person类,有4个属性:String name; int age; String school; String major (2)定义Person类的3个构造方法: Ø 第一个构造方法Person(String n, int a)设置类的name和age属性; Ø 第二个构造方法Person(String n, int a, String s)设置类的name, age 和school属性; Ø 第三个构造方法Person(String n, int a, String s, String m)设置类的name, age ,school和major属性; (3)在main方法中分别调用不同的构造方法创建的对象,并输出其属性值。
代码
public class Person { String name; int age; String school; String major; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name, int age, String school) { this.name = name; this.age = age; this.school = school; } public Person(String name, int age, String school, String major) { this.name = name; this.age = age; this.school = school; this.major = major; } }
public class TestAngle { public static void main(String[] args) { Person person=new Person("Anny",18); System.out.println(person.name+" "+person.age); Person p2=new Person("Vega",18,"hulunbeierCallage"); System.out.println(p2.name+" "+p2.age+" "+p2.school); Person p3=new Person("ROG",19,"anbo","??"); System.out.println(p3.name+" "+p3.age+" "+p3.school+" "+p3.major); } }