Java 语言学习的网址:菜鸟教程.
答:简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、动态性。
学习地址.
类:类是一个模板,它描述一类对象的属性和行为。
对象:对象是一个个体,有状态和行为。
即:类就是一类对象的统称,对象就是这一类具体化的一个实例。
例如:
在Java中,使用关键字 class 来声明一个类。
代码示例:
/*
这两个都是类
*/
class Person {
public String name;
public int age;
public String sex;
}
public class TestDemo {
}
类中的元素称为:成员属性。
类中的函数称为:成员方法。
一个类可以包含以下类型变量:
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。
代码示例:
class Person {
//类的组成:
/**
* 1.属性(成员变量)
* 成员变量:(1).普通成员变量
* (2).静态成员变量
*/
//(1)普通成员变量
public String name;
public int age;
public String sex;
public int count2 = 0;
//(2)静态成员变量 不依赖于对象,只需要通过类名就可以访问
public static int count = 0;
/**
* 2.行为(成员方法)
* 成员方法:(1).普通成员方法
* (2).静态成员方法
*/
//(1)普通成员方法
public void eat() {//吃饭这个行为
int a = 10;//局部变量(需要初始化)
System.out.println(name+"快来吃饭!!");
}
//(2)静态成员方法
public static void staticFunc() {
System.out.println("staticFunc()函数被调用了");
}
public void show() {
System.out.println("姓名:"+name+";"+" "+"年龄:"+age+";"+"性别:"+sex);
}
}
类的实例化:
class Person {
public String name;//普通成员变量
public int age;
public String sex;
//普通成员方法
public void eat() {//吃饭这个行为
System.out.println(name+"快来吃饭!!");
}
public void show() {
System.out.println("姓名:"+name+";"+" "+"年龄:"+age+";"+"性别:"+sex);
}
public class TestDemo {
/**
*实例化
* 类名 变量 = new 类名()
* 调用普通方法和普通成员变量
* 通过:(引用.普通成员变量
* 引用.普通成员方法 ) 调用
*/
public static void main2(String[] args) {
Person per1 = new Person();//实例化成功
per1.name = "caocao";
per1.age = 18;
per1.sex = "男";
per1.show();
System.out.println(per1);//输出:Person@1b6d3586
System.out.println("==================");
//可以通过一个类实例化多个对象
Person per2 = new Person();
per2.name = "zhangsan";
per2.age = 28;
per2.sex = "男";
per2.show();
}
}
实例化一个对象的步骤:
类的成员可以包含以下:字段、方法、代码块、内部类和接口等。
在类中, 但是方法外部定义的变量. 这样的变量我们称为 “字段” 或 “属性” 或 “成员变量”。其作用就是用于描述一个类中包含哪些数据。
方法就是一段语句的集合,用来执行一个功能,描述对象的行为。
a.修饰属性
Java静态属性和类相关, 和具体的实例无关. 即, 同一个类的不同实例共用同一个静态属性。
静态的不依赖于对象,所以调用静态成员的时候,不管是什么对象,都可以调用它。调用方法:类名 . 属性。
b.修饰方法
如果在任何方法上应用 static 关键字,此方法称为静态方法。
注意: 静态方法和实例无关, 而是和类相关. 因此这导致了两个情况:
OOP思想: Object Oriented Programming 面向对象程序设计。
OOP 语言的特征:继承、封装、多态。
软件开发的本质就是对程序复杂度的管理,如果一个代码的程序复杂度太高,那么就很难维护。封装就是最基本的管理程序复杂度的方法。
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度.
被 private 修饰的成员变量或者成员方法, 不能在类外被访问。
封装:使用关键字 private 来修饰成员变量或者成员方法,然后统一提供对应的 get 和 set 方法。好处是:类的调用者对类的学习成本降低了。
代码示例:
class Student {
//public 公开的,公有的。
private String name;
private int age;
private String sex;
//利用快捷键:Alt+f12,然后选择Getter and Setter,进去之后按住shift键,选中要选的函数,后面的关于set和get的函数全部会被调用出来。取代了上面需要一一写出的代码
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class TestDemo2 {
public static void main1(String[] args) {
Student stu = new Student();
stu.setName("caocao");
System.out.println(stu.getName());
stu.setAge(10);
System.out.println(stu.getAge());
}
}
上面的代码就是一个简单的封装。通过代码我们可以看到,在 Student 这个类中,我们用关键字 private 封装了一些成员变量,那么我们在后面的调用中之所以能够调用出它的具体的实例化对象,就是因为调用了对应的 get 和 set 方法,所以才能实现。但是对于原来类里面的成员属性,我们并没有改变它,确保了别人在调用它的时候,也能正常调用。
注意事项:
注:在 IDEA 中,调用 get 和 set 方法的快捷键是 :Alt+f12,然后选择Getter and Setter,进去之后按住shift键,选中要选的函数。
关于 this 的使用:
操作 | 意义 |
---|---|
this.data | 访问成员变量 |
this.func() | 调用成员方法 |
this() | 调用构造方法 |
静态方法内部不能使用 this ,因为静态方法不依赖于对象。
普通方法的语法结构:
返回值 方法名 (形参) {
方法体
}
构造方法:就是一个没有返回值的方法,且方法名和类名是一样的。
构造方法的作用就是实例化对象,而且每一个类里面都会有一个默认的不带参数的构造方法。
注意事项:
代码示例:
class Student {
private String name;
private int age;
private String sex;
public Student() {
this("caocao");//表示调用带有一个参数的构造方法。且this必须放在第一行,只能有一个
System.out.println("不带参数的构造方法执行了!");
}
public Student(String name) {
this.name = name;
System.out.println("带有1个参数的构造方法执行了!!");
}
//利用快捷键:Alt+f12,然后选择Constructor ,按住shift键,选中所需的方法
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
System.out.println("调用了带有3个参数的构造方法!!");
}
}
public class TestDemo2 {
public static void main2(String[] args) {
Student student = new Student("caocao");//输出:带有1个参数的构造方法执行了!!
System.out.println("=================");
Student student2 = new Student();//输出:不带参数的构造方法执行了!
}
}
字段初始化的方式有:
前两种方式前面已经学习过了, 接下来我们介绍第三种方式, 使用代码块初始化。
使用 { } 定义的一段代码.
根据代码块定义的位置以及关键字,又可分为以下四种:
即定义在方法中的代码块。
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x); //输出:x1 = 10
}
int x = 100 ;
System.out.println("x2 = " +x); //输出:x2=100
}
}
即定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
实例代码块可以执行多次
{
//一般初始化实例数据成员
this.name = "sdjdjfi";
count = 10;
this.age = 10;
System.out.println("实例代码块!可执行多次");
}
注意:实例代码块优先于构造函数执行。
使用static定义的代码块。一般用于初始化静态成员属性。
静态代码块只能执行一次,且是最先执行的。
static {
//初始化静态的数据成员
count = 9990;
System.out.println("静态代码块!只能执行一次");
}
总结:几种代码块的执行顺序
当我们想把对象的属性打印出来的时候,我们必须自己构造一个 show 函数,然后调用它,这是一种方法。其实在 Object 类里面提供了一个 toString 方法,可以将对象自动转成字符串.
代码示例:
class Student {
//public 公开的,公有的。
private String name;
private int age;
public String sex;
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void show() {
System.out.println("姓名:"+name+";"+" "+"年龄:"+age+";"+"性别:"+sex);
}
//toString 方法:该方法的快捷键:Alt+insert(f12)
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
public class TestDemo {
public static void main(String[] args) {
Student stu = new Student("张三",18,"男");
stu.show();//输出: 姓名:张三; 年龄:18; 性别:男
System.out.println(stu);//输出: Student{name='caocao', age=19,sex='男'}
}
注意事项:
匿名只是表示没有名字的对象.
代码示例:
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
}
public class Main {
public static void main(String[] args) {
new Person("caocao",19).show();//通过匿名对象调用方法
}
}
// 执行结果
name:caocao age:19