[Java语法篇1] 类与对象
一、Java代码块
1.分类
静态代码块、非静态代码块
2.运作原理
1)静态代码块:
java在执行时需要先将类加载到内存(main方法执行之前,在判断语法正确之前就执行了,因为class文件不是二进制的,加载将其转换成二进制),在加载类时会执行一次静态代码块(只执行一次,因为类加载只执行一次),不执行非静态代码块
2)非静态代码块:
创建类的对象一次时(new Test();)会执行一次,因为在类里面。
public class Test{
static{
System.out.println("静态代码块");
}
{
System.out.println("非静态代码块");
}
public static void main(String[] args){
new Test();
new Test();
}
}
二、Java方法
1.方法的结构
方法: 访问权限 修饰符 返回值类型 方法名 ([参数列表]) { 方法体 }
2.各结构的作用
1)访问权限:
public protected 默认的private 控制方法能否在其他“类”中使用
2)方法的使用:
存储对象的变量.方法名()
3)修饰符:
final static synchronized等,如果方法没有static修饰,则只能使用“存储对象的变量.方法()”,有static修饰可以如下方式使用“类名.方法名()”(推荐使用)
4)方法名:
首先符合Java标识符命名规范;动词和动宾结构
5)参数列表:
可有可无,多个参数之间使用逗号间隔
int add(int a, int b, int c){
return a+b+c;
}
静态参数: 必须传等量的值
动态参数: 数据类型 … 参数名
可以传值也可以不传值,可以传无数个值
实质是一个数组,多个值按顺序存入数组里,按数组方式检索
一个方法中只能到定义一个动态参数,动态参数只能定义在参数列表最后
6)返回值类型:
a. 如果方法没有返回值,则返回值类型为void
void test(){
System.out.println("Test");
}
b. 如果返回值为基本数据类型,则返回值为 基本数据类型 或 长度比返回值类型大的数据类型
boolean类型没有比其长度更大的类型
boolean compare(int x,int y){
return x>y;
}
int add(int x,int y){
return x+y;
}
double add(int x, int y){
return x+y;
}
c. 如果返回值是引用类型,则方法返回值类型要么 与数据类型一致,要么 是数据类型的父类
Object类是所有类的父类
3.Java方法的注意事项
1)方法内可以调用方法
2)方法内不许定义方法
3)程序的入口的main函数结构只能是public static void main(String[] args){}
其他自定义的main()无效
三、Java方法的重载
1.重载含义:
方法名相同,参数列表不同
1)参数个数不同
2)参数类型不同
注:重载不考虑参数名相同与否
动态参数也算在重载条件里
int add(int x, int y){
return x+y;
}
int add(int ... a){
return a[0]+a[1];
}
int add(int x, int y, int z ){
return x+y+z;
}
double add(double x, double y){
return x+y;
}
2.重载方法的调用
根据参数个数和类型的不同调用不同的方法
测试代码:
public class Computer{
int add(int x, int y){
return x+y;
}
int add(int ... a){
return a[0]+a[1];
}
int add(int x, int y, int z ){
return x+y+z;
}
double add(double x, double y){
return x+y;
}
public static void main(String[] args){
Computer c = new Computer();
c.add(1,2,3); //参数个数
c.add(1.0,2); //参数类型
}
}
四、关键字this的使用
小贴士:System.out.println(); 输出时输出的是栈内的
1.this的解释
代词,哪个对象调用存在this的方法,则this就是谁
测试代码:
public class Student{
public void test(){
System.out.println("this的使用" + this);
}
public static void main(String[] args){
Student stu = new Student();
stu.test();
System.out.println("对象的地址" + stu);
}
}
五、Java成员变量
1.定义
直接在类体中定义的变量
public class UserInfo{
int age;
String name;
String mobile;
String address;
public static void main(String[] args){
UserInfo user = new UserInfo();
System.out.println(user.age);
System.out.println(user.name);
}
}
2.成员变量的特点
1)成员变量拥有默认值:
变量类型 | 默认值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
char | ’ ’ |
boolean | false |
其他类型 | null |
2)成员变量在整个类中都有效,但一般放置在类头部
以下代码同样有效
public class UserInfo{
public static void main(String[] args){
UserInfo user = new UserInfo();
System.out.println(user.age);
System.out.println(user.name);
}
int age;
String name;
String mobile;
String address;
}
3.成员变量的作用
用来详细描述对象信息
public class UserInfo{
int age;
String name;
String mobile;
String address;
public static void main(String[] args){
UserInfo wang= new UserInfo();
wang.age = 12;
wang.name = "王铁柱";
wang.mobile = "15995448551";
wang.address = "北京市海淀区";
}
}
注:上述代码对成员变量的赋值比较繁琐,下面介绍另一种赋值方法:采用构造方法赋值
六、构造方法
1.构造方法结构
方法名是类名: 类名(参数列表){}
public class UserInfo{
int age;
String name;
String mobile;
String address;
UserInfo(int n,String m,String a,String b){
age = n;
name = m;
mobile = a;
address = b;
} //构造方法
}
2.构造方法的特点:
1)构造方法没有返回值部分(void 都不能有)
UserInfo(int n,String m,String a,String b){}
2)一个类中默认有无参构造方法,当定义了一个有参构造方法时,则无参构造方法隐藏
3)构造方法不允许用final 和 static修饰
1)一个类中根据需要可以定义多个有参构造方法,是重载的体现
3.构造方法的调用
构造方法使用new来调用
注:当定义有参构造方法后将不能继续采用:类名 变量名 = new 类名() 继续创建对象(因为无参构造方法此时隐藏)
应采用:类名 变量名 = new 类名(实参列表) 的形式创建对象
public class UserInfo{
int age;
String name;
String mobile;
String address;
UserInfo(int n,String m,String a,String b){
age = n; //给成员变量赋值
name = m;
mobile = a;
address = b;
} //有参构造方法
public static void main(String[] args){
//UserInfo wang= new UserInfo(); //无参构造方法,此代码此时应为报错
UserInfo wang= new UserInfo(12,"王铁柱","15995448551","北京市海淀区"); //采用new调用有参构造方法并向其传入实参
}
}
4.构造方法的互相调用
目的:为了简化代码
1)构造方法中调用其他构造方法时的语法结构:
this(实参列表);
2)一个构造方法调用其他构造方法时必须将构造方法(即this(实参列表);)置于有效代码第一行
注:(1)一个构造方法只能调用一个其他构造方法(第二条决定),但被调用的构造方法可以继续调用另外的构造方法,即可层层调用
(2)一个构造方法可以调用参数比他少的构造方法,也可以调用比他多的构造方法(此时需要在参数列表里加上多出来的参数对应的实参,或默认值(推荐)),但不可以调用自己
public class UserInfo{
int age;
String name;
String mobile;
String address;
UserInfo(int n,String m,String a,String b){
this(n,m); //调用其他构造方法
mobile = a;
address = b;
} //有参构造方法
UserInfo(int n,String m){
this(n);//调用其他构造方法
name = m;
} //有参构造方法
UserInfo(int n){
age = n; //给成员变量赋值
} //有参构造方法
public static void main(String[] args){
//UserInfo wang= new UserInfo(); //无参构造方法,此代码此时应为报错
UserInfo wang= new UserInfo(12,"王铁柱","15995448551","北京市海淀区"); //采用new调用有参构造方法并向其传入实参
}
}