JAVA核心技术I---JAVA基础知识(对象与类)
2023-09-14 03:13:47
一:规范
将每一个类存在一个单独的源文件中
Employee.java
public class Employee {
private int age;
private float salay;
private boolean sex;
private String name; //char name[]可以 public Employee(String nm,float sy,int ag,boolean sx) {
this.age=ag;
this.salay=sy;
this.sex=sx;
this.name=nm;
} public void printInfo() {
System.out.println(name+" "+age+" "+salay+" "+sex);
}
}
Employee.java
EmployeeTest.java
public class EmployeeTest {
public static void main(String args[]) {
Employee[] staff=new Employee[]; //java中没有指针,可以使用数组代替
staff[]=new Employee("faffe",12.34f,,true);
staff[]=new Employee("faaaf",12.64f,,false);
staff[]=new Employee("fafwf",11.34f,,true); for(Employee e:staff) {
e.printInfo();
}
}
}
EmployeeTest.java
faffe 12.34 true
faaaf 12.64 false
fafwf 11.34 true
二:构造方法(同C++)
public class Employee {
private int age;
private float salay;
private boolean sex;
private String name; //char name[]可以
//多种构造,属于重载overload,不限于构造方法
public Employee() { } public Employee(Employee e) {
this.age=e.getAge()+;
this.sex = !e.getSex();
this.name=e.getName();
this.salay=e.getSalay()+;
} public Employee(String nm,float sy,int ag,boolean sx) {
this.age=ag;
this.salay=sy;
this.sex=sx;
this.name=nm;
}
public int getAge() {
return age;
} public float getSalay() {
return salay;
} public boolean getSex() {
return sex;
} public String getName() {
return name;
} public void printInfo() {
System.out.println(name+" "+age+" "+salay+" "+sex);
}
}
public static void main(String args[]) {
Employee[] staff=new Employee[]; //java中没有指针,可以使用数组代替
staff[]=new Employee("faffe",12.34f,,true);
staff[]=new Employee("faaaf",12.64f,,false);
staff[]=new Employee("fafwf",11.34f,,true); for(Employee e:staff) {
e.printInfo();
} Employee cstaff=new Employee(staff[]);
cstaff.printInfo();
}
faffe 12.34 true
faaaf 12.64 false
fafwf 11.34 true
faffe 62.34 false
不同之处:在于实例化对象时
java必须使用new实例化对象,而C++可以直接构造
C++:
Employee e("ffaw",...);
JAVA:
Employee e=new Employee("fwaf",...)
此外:java含有垃圾回收机制,所以没有析构函数。但是含有finalize方法,用于在回收对象前调用
三:main方法
每一个类都可以在单独文件中包含一个
public static void main(String args[])方法
用于测试每个模块
四:赋值问题:基本型别赋值是拷贝赋值对象赋值是reference
可以认为:基本类型的变量值小,可以直接拷贝;对象包含多个值,不容易复制,赋值采用共享同一块内存区域更加快
值传递:基本类型
int a,b;
a=;
b=a;
System.out.println(a+" "+b);
b++;
System.out.println(a+" "+b);
public static void swap(int a,int b) {
int temp=a;
a=b;
b=a;
}
System.out.println(a+" "+b);
swap(a,b);
System.out.println(a+" "+b);
引用传递:对象引用
public class EmployeeTest {
public static void main(String args[]) {
Employee e=new Employee("fafwa",12.33f,,true);
Employee d=e;
e.printInfo();
d.printInfo();
change(e); //修改e,会发现d也会变化
e.printInfo();
d.printInfo();
} public static void change(Employee obj) {
obj.setAge(obj.getAge()+);
} }
fafwa 12.33 true
fafwa 12.33 true
fafwa 12.33 true
fafwa 12.33 true
五:初值问题
对于函数局部变量,必须赋初值,不然无法通过编译。
对于类的成员变量,类似于c中的静态变量或者全局变量会被赋初值
public class EmployeeTest {
public static void main(String args[]) {
Employee e=new Employee();
e.printInfo();
}
}
public class Employee {
private int age;
private float salay;
private boolean sex;
private String name; //char name[]可以 public Employee() {
//并未赋值,成员变量存放默认值
}
}
null 0.0 false
默认初值:
– short 0 int 0 long 0L
– boolean false
– char '\u0000‘
– byte 0
– float 0.0f
– double 0.0d
– String null
六:类中初始化块
只要构造类的对象,就会立刻被执行
public class Employee {
//实例域初始化块
private int age;
private float salay;
private boolean sex;
private String name; //char name[]可以 static
{
//.... 静态初始化块,会在对象构造前执行
System.out.println("static block");
} { //对象初始化块
System.out.println("object block");
} public Employee() {
System.out.println("construct block");
}
}
public static void main(String args[]) {
Employee e=new Employee();
Employee d=new Employee();
}
static block //先执行类静态块,执行一次
object block //每一次对象构造前都会先执行对象初始化块,放在构造方法后面也是先执行与构造方法
construct block //之后执行构造方法
object block
construct block
{ //对象初始化块
System.out.println("object block");
} public Employee() {
System.out.println("construct block");
} { //对象初始化块
System.out.println("object2 block");
} static block
object block
object2 block
construct block
object block
object2 block
construct block
最新文章
- linux重定向
- 转载: scikit-learn学习之回归分析
- C# 利用WORD模板和标签(bookmark) 批量生成WORD
- static使用方法小结
- Windows的TCP协议参数
- Achartengine.jar绘制动态图形一 --饼图
- LeetCode算法题-Flood Fill(Java实现)
- xmlhttprequest readyState 属性的五种状态
- BZOJ3779重组病毒LCT
- BZOJ2940 条纹
- C#断点续传下载。
- 转:@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
- TCHART类型
- CentOS部署PHP环境
- MVC 访问静态页面 View 下面放JS
- 杂项:IIS
- css对ie的兼容性问题处理(一):
- MySQL易忘知识点梳理
- Windows2003 + IIS6 安装.Net FrameWork 4.0 兼容早期版本的测试
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载(一)
热门文章
- BZOJ3812 主旋律(状压dp+容斥原理)
- eolinker——添加项目成员
- Matplotlib学习---用matplotlib画热图(heatmap)
- 【XSY1642】Another Boring Problem 树上莫队
- groovy的效率问题
- Django 静态文件相关设置
- thinkphp5.0.7 &;===composer更新===&; thinkphp5.0.9 debug “controller not found”
- JLOI2016 简要题解
- Hdoj 1875.畅通工程再续 题解
- 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)