微信公众号:浅谈Java基础
关注可了解更多的编程知识,获取更多资源;
加入一起努力吧[1]
面向对象的三大特征:封装、继承、和多态。
java封装(下一篇会细讲)
对于封装,java提供了public、protected、private三种访问控制修饰符实现了良好的封装。这些修饰符是置于类或类中的成员之前的,下面这个表格是对于四中访问控制符作用效果的描述,先了解一下,下一篇文章细讲这四个之间的区别。
了解java方法
这篇文章讲一下java中的方法,在c语言中,有函数,那么在java中叫方法,叫的名字不同而已。
在java中,方法是类或对象的行为特征抽象,它是很重要的组成部分,java中所有的方法要么属于类,要么属于对象,不能独立存在,我们定义方法的时候,只能把方法定义在类体内,不能独立的定义一个方法,方法什么时候属于类呢?在方法使用static关键字的时候,这个方法就属于类,否则就属于这个类的实例,也就是对象。
public class Method {
public static void ff() {
System.out.println("该方法属于类");
}
public void mm() {
System.out.println("该方法属于对象");
}
}
在方法声明时如果包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际传递给形参的参数值也被称为实参。Java里方法的参数传递方式只有一种:值传递。所谓的值传递就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受任何影响。
下面这个例子很清楚的解释了上面这段话,方法getSum()中的a,b为形参,main方法中a,b称为实参,给getSum()方法传值,传的是他们的副本,所以main里面输出的a的值不变
public class Test {
public void getSum(int a,int b){
a = a+b;
System.out.println("参数a的值改变为:"+a); //10
}
public static void main(String[] args) {
int a = 5;
int b = 5;
Test test = new Test();
test.getSum(a, b);
System.out.println(a);//5
}
}
基本数据类型、引用数据类型为参数时的传递,传递的同样是实际值的副本,但要注意的是引用数据类型的值存放的是地址值,即指向实际对象的那个地址值。所以调用方法时将地址值传递给了方法,方法操作时根据地址值找到了具体的对象,将具体对象的信息发生了变化。
Student类:
public class Student {
protected String name = "zhangsan";
}
Test类:
public class Test {
private static void changeValue(Student st){
st.name = "李四";
}
public static void main(String[] args) {
Student st = new Student();
System.out.println(st.name); //zhangsan
Test.changeValue(st);
System.out.println(st.name); //李四
}
}
构造器
构造器是一个特殊的方法,这个特殊方法用于创建实例时执行初始化。构造器是创建对象的重要途径,因此Java类必须包含一个或一个以上的构造器。
构造器最大的用处就是在创建对象时执行初始化,所谓的初始化就是创建对象时,系统对这个对象的Field进行赋值处理。
public class Person {
private String name = null;
private int age = 0;
Person(String name,int age){//有参构造器
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age = age;
}
public static void main(String[] args) {
Person p1 = new Person("张三",35);
System.out.println(p1.getName());
System.out.println(p1.getAge());
}
}
注意:如果程序员提供了自定义的构造器,系统就不再提供默认的构造器,在上例的Person类中提供了构造器因此不能再通过new Person()代码来创建实例,因为该类不再包含无参数的构造器。