Java面向对象第一周及Leetcode561讲解

一、类和对象

类:具有相同特征和行为的多个对象的统称.

定义一个类:[修饰符] class 类名(类名由一到多个单词组成,每个单词首字母大写){
零到多个构造器定义
零到多个成员变量
零到多个方法
}
注:类里各成员定义顺序无影响,各成员之间可以相互调用,但static修饰的成员不能访问无static修饰的成员.
构造器是一个类创建对象的根本途径(通过new来调用),Java中如果没有为一个类编写构造器,系统会为该类提供一个默认的无参构造器,如果编写了,则系统不会提供构造器.
1.定义构造器:
[修饰符] 构造器名(形参列表){
零个到多个可执行语句组成的构造器执行体
}
修饰符:可以省略,有public,protected,private,任选一个.
构造器名:必须与类名相同.
注:构造器不能定义返回值类型,也不能使用void声明构造器无返回值,如果出现这种情况,编译不会出错,但它就会被当做一个方法来处理,不是构造器了.
2.定义成员变量:
[修饰符] 类型 成员变量名字 [=默认值];
修饰符:可以省略,有public,protected,private,static,final(其中public,protected,private三个只能选择一个,可以和static,final组合修饰成员变量)
3.定义方法:
[修饰符] 方法返回值类型 方法名(形参列表){
零个到多个可执行语句组成的方法体
}
修饰符:可以省略,有public,protected,private,static,final,abstract(其中public,protected,private三个只能选择一个;abstract和final选择一个使用,可以和static组合)
例子:

public class Person{
 //定义了两个成员变量
 public String name;
 public  int age;
 //定义了一个say方法
 public void say(String content){
 System.out.println(content);
}

对象:真实存在的事物.

1.创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例.
//使用Person类定义一个Person类型的变量
Person P;
//通过new调用Person类的构造器,返回一个Person类的实例
//将该Person实例赋值给p
p=new Person();
或者写成Person p=new Person();//定义p同时为它赋值
创建完对象之后,就可以使用该对象了,对象的作用如下:
(1)访问对象的实例变量
(2)调用对象的方法
如果权限允许,类里定义的方法和成员变量都可以通过类或对象来调用(语法:类.类变量|方法,或实例.实例变量|方法)
注:static修饰的方法和成员变量,可以通过类来调用,也可以通过实例来调用;反之则只能通过实例来调用.
2.this关键字
this:总是指向调用该方法的对象,它可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的;它代表的只能是当前类的实例;只有当这个方法被调用时,它所代表的对象才被确定;谁在调用这个方法,它就代表谁.

public class Dog {
    public void cry(){
        System.out.println("正在执行");
    }
    public void run(){
        d.cry();//改成this.cry()更好
        System.out.println("正在执行");
    }
}
public class DogTest{
    public static void main(String[] args){
        //创建Dog对象
        Dog dog=new Dog();
        //调用run方法
        dog.run();
    }
}

3.构造函数(构造器)和成员函数有什么区别?
(1)外界调用
构造函数只能在创建对象时调用,对象创建完毕之后不能已创建的对象调用.
成员函数只能在对象创建之后调用,可以重复的.
(2)返回值
构造函数不需要返回值.
成员函数可需可不需.
(3)权限修饰符
构造函数可以用任意权限修饰符.
成员函数也可以用任意权限修饰符.
(4)内部调用
构造函数可以调用成员函数(但是这个成员函数一般不会当做对象行为去看待).
构造函数可以调用构造函数,(各式:this(参数列表) 调用当前类中的其他构造函 数),但会导致无限递归,而且this(…)必须在第一句,防止值的覆盖.
成员函数可以调用成员函数.
成员函数不能调用构造函数(但是可以用new关键字来调用,而且构造函数可以和成员函数重名).

二、LeetCode561

题目:给定长度为 2n 的数组,你的任务是将这些数分成 n 对,例如 (a1,b1),(a2,b2),…, (an,bn),使得从1到n的min(ai,bi)总和最大.
示例:
输入: [1,4,3,2]
输出: 4
解释: n 等于2, 最大总和为4=min(1,2)+min(3,4).
思路:题目要求得到1到n的min(ai,bi)和的最大值,所以我们首先要考虑的是升序排序,只有这样才能确保两两配对之后所有的最小值之和达到最大,如[1 8 5 6]这个数组不升序排序得到的值是1+5=6,而升序排序之后,它就变成了1+6=7,所以我们首先升序排序,然后每队之中的两个元素进行比较,得到最小值,然后相加就可以得到最大值(升序排序有个方法在API中的java.util里面有个Arrays.sort(数组名))
代码:

class Solution {
    public int arrayPairSum(int[] nums) {
        Arrays.sort(nums);//升序排序nums数组
        int sum=0;
        for(int i=0;i<nums.length;i+=2){
            sum+=Math.min(nums[i],nums[i+1]);//比较每一对中元素的最小值,然后赋值给sum
            
        }
        return sum;
      
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值