类和对象
Java语言是面向对象的语言,因而一定要掌握类和对象的使用。面向对象的三个重要特征 (封装性,继承性,多态性)
封装性:使数据和加工该数据的方法封装成一个整体
其目的在于把对象的设计者和使用者分开
继承性:继承性是子类共享其父类数据和方法的机制。
继承分为单继承和多重继承。继承具有传递性。
多态性:
对象=数据+方法
程序=对象+消息传递
类
将具有相同属性及相同行为的一组对象称为类(class)。
JAVA中类被认为是一种抽象的数据类型,不但都数据,还有。类是抽象的概念,因此必须用类创建出对象。
类的声明与定义
[标识符] class 类名称
{
类的成员变量
类的方法
}
JAVA访问权限(修饰符)
默认(default)
不加任何访问修饰符
这类方式声明的方法和类只允许在同一个包内访问
私有(private)
方法/变量/构造方法被声明为私有时,尽在类内可以被访问
类/接口不能被声明为私有
共有(public)
类/接口/方法/构造被声明为公有时,可以跨类,跨包访问
跨包访问时,只需要事先导入包就行
保护(protected)
变量/方法/构造方法被声明为保护时,可以在本类和子类中访问(即使是在不同的包内)
类/接口不能声明为保护类
final
类被声明为final不允许被继承,类实现的细节不允许修改
类的属性
属性(field)的定义
类的属性是变量
[修饰符] 属性类型 属性名[=默认值]
属性的使用
package study_JAVA;
import java.util.Random;
/**
* @author 86152
*练习,二维数组
*/
public class demo {
static String a="string-a";
static String b; //静态,属于类,对象看到的属性值相同
String c="string-c";
String d; //非静态,属于类私有,属性值可不同
static
{
printStatic("before static");
b="string-b";
printStatic("after static");//初始化静态成员变量
}
public static void printStatic(String title)
{
System.out.println("-------"+title+"--------");
System.out.println("a=\""+a+"\"");
System.out.println("b=\""+b+"\"");
}
public demo() //构造方法
{
print("before constructor");
d="string-d";
print("after constructor");
}
public void print(String title) //公有方法
{
System.out.println("-------"+title+"---------");
System.out.println("a=\""+a+"\"");
System.out.println("b=\""+b+"\"");
System.out.println("c=\""+c+"\"");
System.out.println("d=\""+d+"\"");
}
public static void main(String args[])
{
System.out.println();
System.out.println("-------创建usingAttribute对象---------");
System.out.println();
new demo(); //使用关键字new和构造方法创建一个匿名对象
}
}
对象
类实例化的产物
在JAVA中,“一切皆对象”
形象化的说,类是“树叶”,对象是“松树叶”,“柳树叶”。。。
它们都是树叶但它们的属性(大小,形状,颜色都不相同)
对象的声明和使用
类名 对象名=new 类名();
“栈内存”和”堆内存“
护士登记表相当于栈内存
育婴房相当于:堆内存
只有堆内存没有栈内存的对象是匿名对象
package study_JAVA;
import java.util.Random;
/**
* @author 86152
*练习,匿名对象
*/
public class demo {
public void talk()
{
System.out.print("匿名对象");
}
public static void main(String args[])
{
new demo().talk();
}
}
匿名对象
1.没有栈内存指向
2.只能使用一次,之后会被垃圾回收器收回
对象的使用
对象名.属性名
对象名.方法名()
对象的比较
1.利用==运算符
用于比较两个对象的 内存地址值
2.利用equals()方法
比较 两个对象的内容是否一致
package study_JAVA;
import java.util.Random;
/**
* @author 86152
*练习,==和equal的区别
*/
public class demo {
public static void main(String args[])
{
String str1=new String("java");
String str2=new String("java");
String str3=str2;
if(str1==str2)
{
System.out.println("str1==str2\n");
}
else
{
System.out.println("str1!=str2\n");
}
if(str2==str3)
{
System.out.println("str2==str3\n");
}
else
{
System.out.println("str2!=str3\n");
}
if(str1.equals(str2))
{
System.out.println("str1==str2\n");
}
else
{
System.out.println("str1!=str2\n");
}
}
}
对象数组的使用
数组不仅能用来存储基本数据类型,也能用来存储对象
当创建一个对象时,Java虚拟机(JVM)就会给对象分配一个自身的引用–this。因此静态属性和静态方法没有this.
package study_JAVA;
import java.util.Random;
/**
* @author 86152
*练习,匿名对象
*/
public class demo {
public static void main(String args[])
{
Person person=new Person();
Person person1=new Person();
person.age=21;
person.name="lucksim";
person.like=true;
person.talk();
person1=person;
person1.talk();
}
}
class Person{
String name;
int age;
boolean like;
public void talk()
{
System.out.print("\n姓名="+name+"\n"+"年龄="+age+"\n"+"是否喜爱="+like);
}
}