1.Java类及类的成员:属性、方法、构造器;代码块、内部类
2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3.其他关键字:this,super,static,final,abstract,interface,package,import
基本元素:类和对象
package j1;
//类和对象的使用
public class PersonTest {
public static void main(String[] args) {
//创建类的对象=类的实例化=实例化类
Person p1=new Person();
//Scanner scan=new Scanner(System.in);
//调用对象的结构:属性、方法
//调用属性:“对象.属性”
p1.name="Tom";
p1.isMale=true;
System.out.println(p1.name);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.talk("Chinese");
Person p2=new Person();//如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)
System.out.println(p2.name);//null
System.out.println(p2.isMale);//false
System.out.println(p2.age);//1
Person p3=p1;
System.out.println(p3.name);
p3.age=10;
System.out.println(p1.age);//10
}
}
//创建类及类的成员
class Person{
//属性/field/成员变量/域/字段:对应类中的成员变量
String name;
int age=1;
boolean isMale;
//方法/成员方法/函数/method:对应类中的成员方法(函数)
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void talk(String language){
System.out.println("说话"+language);
}
}
对象的内存解析
成员变量与局部变量
1.相同:定义格式一样:数据类型 变量名=变量值;先声明后使用;有其对应的作用域
2.不同:在类中声明位置的不同 :属性直接定义在类的一对{}里;局部变量声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
package j1;
/*封装与隐藏
1.当我们创建一个类的对象以后,可以通过“对象.属性”对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储类型的制约。
要加入额外的限制条件,只能通过方法进行限制条件的添加,同时将属性声明为private,此时针对属性体现了封装性。
2.封装性的体现
属性私有化(private)的同时,提供公共(public)的方法来获取(getxxx)和设置(setxxx)此属性的值
除此之外,不对外暴露的私有的方法也是体现
3.权限修饰符
private、缺省、protected、public
可以修饰类及类的内部结构:属性、方法、构造器、内部类
修饰类只能用缺省、public
*/
public class AnimalTest {
public static void main(String[] args) {
Animal a=new Animal();
a.name="花花";
a.age=1;
//a.legs=4;
a.show();
a.setLegs(-6);
a.show();
}
}
class Animal {
String name;
int age;
private int legs;
//对属性的设置
public void setLegs(int l){
if(l>=0&&l%2==0){
legs=l;
}else{
legs=0;
}
}
//对属性的获取
public int getLegs(){
return legs;
}
public void eat(){
System.out.println("动物进食");
}
public void show(){
System.out.println("name="+name+",age="+age+",legs="+legs);
}
}
package j1; /* 构造器constructor 作用: 1.创建对象 2.属性初始化 3.一个类中定义的多个构造器叫重载 4.一旦显式的定义了构造器,系统不默认提供 注:如果没有显式的定义构造器的话,系统默认提供一个空参的构造器 格式:权限修饰符 类名(形参列表){} */ public class PTest { public static void main(String[] args) { P p=new P();//new+构造器 p.eat(); P p1=new P("lili",12); System.out.println(p1.name+","+p1.age); } } class P{ String name; int age; //构造器 public P(){ System.out.println("P()......"); } public P(String n,int a){ name=n;//属性初始化 age=a; } public void eat(){ System.out.println("吃饭"); } public void sleep(){ System.out.println("睡觉"); } public void talk(String language){ System.out.println("说话"+language); } }
属性赋值的先后顺序
①默认初始化值0
②显式初始化
③构造器中赋值
④通过对象.方法或对象.属性的方式
package j1;
/*
this 关键字的使用
1.this可以用来修饰:属性、方法、构造器
2.可理解为当前对象
在类的方法中,可以使用“this.属性”或“this.方法”的方式调用当前对象的属性或方法。但是,通常情况下省略。
若方法的形参和类的属性同名时,必须使用this表明为属性
3.this调用构造器
①在类的构造器中,可以显式的使用“this(形参列表)”方式,调用本类中指定的其它构造器
②不能自己调自己
③必须放首行
*/
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person("lili",12);
System.out.println(p1.GetAge());
}
}
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name){
this();
this.name=name;
}
public Person(int age){
this();
this.age=age;
}
public Person(String name,int age){
this(age);
this.name=name;
}
public void SetName(String name){
this.name=name;
}
public String GetName(){
return name;
}
public void SetAge(int age){
this.age=age;//this当前对象的
}
public int GetAge(){
return age;
}
}
package关键字的使用 1.进行项目中类的管理,首行声明 2.属于标识符每"."一次,就代表一层文件目录,同一个包下,不能命名同名的接口、类import(导入) 1.在源文件中显式的导入指定包下的类和接口 2.声明在包与类之间 3.可以使用“xxx.*”的方式表示可以导入xxx包的所有结构 4.如果使用java.long包定义下的可省略import 5.如果使用的类或接口时本包下定义的import可省 6.如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全名的形式显示 7.如果导入的是该包子包下的结构,仍需显式定义 8.import static:可导入指定类或接口中的静态结构