1 java面向对象
1.1 面向对象的思想
面向对象和面向过程区别
面向对象是相对于面向过程,面向过程指定功能行为,面向对象将功能封装到对象中,强调的是功能的对象
例: 大象放进冰箱
面向过程:
打开门 —大象放进去—关闭门
面向对象:
class 大象{
}
class 冰箱{
}
面向对象三大特征:
1.封装
2.继承
3.多态
1.2 类和对象
面向对象的两个核心:类和对象
类:类是对一类事物的描述,抽象的概念
--具有相同属性和行为对象的集合
对象:实际在该类事物中的每个个体、也称为一个实例(万物皆对象)
--类中的一个实例
类和对象的区别:类和对象的抽象(类型)
例:
int num=10;//int 是类型 num是对象
1.2.1类的定义
语法:
[访问权限修饰符][修饰符]class 类名{
类的成员(5个) 类中不能直接写逻辑代码
}
访问权限修饰符:public(公共) package默认(不加)
修饰符:abstract(抽象) final(最终) 不能同时出现
class:修饰类的一个关键字
类名:符合定义标识符的规则
1.2.2类中的成员(5个)
class Student {
//5个成员
//1属性
String name;
int age;
String sexy;
//2方法
public void study() {
}
//3构造器
public Student() {
}
//4代码块
{
int n=10;
System.out.println(n);
}
//5内部类
class Dog{
}
}
1.2.3 属性(成员之一)
语法:
[访问权限修饰符][修饰符] 类型 属性名;
访问权限修饰符:private(私有),默认(同包),protected(子类),public(公共)
修饰符:static(静态),final(常态),trasient(不能被序列化),volatile(线程安全)
类型:
基本数据类型:
整型:byte short int long 默认:0
浮点型:float double 默认:0.0
字符型:char 默认:空格
布尔型:Boolean 默认: flase
引用数据类型:
{类、数组、接口……} 默认:null
变量:
成员变量
局部变量
区别:
相同点:
声明方式相同:类型 变量名 = 初值;
注意:成员变量可以加访问权限修饰符;但是局部变量不能加访问权限修饰符
不同点:
1)声明的位置不同
成员变量:声明在类中,方法外
局部变量:方法中,或者方法参数
2)在内存中存储的位置不同
成员变量:内存的栈中存储 成员变量在创建完对象之后会有默认值
局部变量:内存的堆中存储 必须初始化赋值
3)初始值不同
成员变量:创建完对象之后又初始值
局部变量:没有初始值
4)生命周期不同
成员变量:成员变量随着对象的创建而创建,对象的销毁而销毁
局部变量:随着方法的调用而创建,方法调用结束而销毁
补充:作用域问题:
原则:就近原则
- 练习: 创建一个动物类,声明昵称和年龄属性,并定义一个方法显示动物信息
public class TestAnimal {
public static void main(String[] args) {
Animal a1=new Animal();
a1.name="小狗";
a1.age=1;
a1.show();
Animal a2=new Animal();
a2.name="小猫";
a2.age=2;
a2.show();
}
}
class Animal {
//属性
String name;
int age;
//方法---显示动物名称
public void show() {
System.out.println(age+"==="+name);
}
}
1.2.4 方法(成员之二)
语法:
[访问权限修饰符][修饰符] 返回值 类型 方法名(类型 参数,类型 参数……){
//方法体 实现方法功能的代码
}
访问权限修饰符:private(私有),默认(同包),protected(子类),public(公共)
修饰符:static(静态) final(最终) native(底基于C或者C++实现重写)abstract(抽 象) synchronized(线程锁)
返回值 类型:
无返回值类型:void
有返回值类型:基本类型(8种),引用类型(无数种)
在方法体中,必须要使用return值,返回值的类型要与定义方法的返回值类型一致
方法名:首字母小写,其他单词首字母要大写
参数:局部变量
public class TestCalc{
public static void main(String[] args) {
//1创建对象
Calc c=new Calc();
//2给属性赋值
c.n1=10;
c.n2=8;
//3调用方法
//1)
c.add();//无返回值的方法
//2)
int he=c.add2();// 有返回值的方法
System.out.println(he);
//3)
c.add3(c.n1,c.n2); //有参无返回值 ()中写实参
//4)
int he1=c.add4(c.n1, c.n2);
System.out.println(he1);
}
}
class Calc {
int n1;
int n2;
//功能实现两数求和
public void add() { //void 在方法体内实现功能
System.out.println("两数的和:"+(n1+n2));
}
public int add2() {//无参 有返回值的方法,返回两数的和
return n1+n2;
}
//有参无返回值
public void add3(int a,int b) { //定义的时候无值 形参
System.out.println("两数和:"+(a+b));
}
public int add4(int a,int b) {
return a+b;
}
}
- 练习一:求圆的周长和面积:定义一个圆的半径属性
public class TestCircle {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
Circle a=new Circle();
System.out.println("请输入圆的半径");
a.radius=input.nextDouble();
a.getArea();
a.getPerimeter();
}
}
class Circle{
double radius;
public void getPerimeter(){
double perimeter=2*Math.PI*radius;
System.out.println("圆的周长:"+perimeter);
}
public void getArea() {
double area=Math.PI*Math.pow(radius, 2);
System.out.println("圆的面积:"+area);
}
}
- 练习二:比较两数大小,返回最大值
public class Test2 {
public static void main(String[] args) {
Clac a=new Clac();
a.n1=10;
a.n2=20;
a.compare();
}
}
class Clac{
double n1;
double n2;
public void compare() {
if(n1>n2) {
System.out.println(n1+">"+n2+"最大值:"+n1);
}else {
System.out.println(n2+">"+n1+"最大值:"+n2);
}
}
}
-
- 用有参来写
1.2.5 类成员的使用
//属性使用
1、创建类的对象
类名 对象 = new 类名();
2、调用属性
对象.属性
3、调用方法:
对象.方法名();
4、本类中方法之间的调用
直接调用方法名即可(隐藏this 代表当前对象)
1.2.6 匿名对象的使用
Calc c = new Calc();
c.getMax1(10, 5);
//相当于
new Calc().getMax1(10, 5);//只使用一次可以用匿名对象,多次使用创建对象