Java-静态、非静态方法的区别以及on-static method getLastRow() cannot be referenced from a static context问题

public class TestWay {
public static void main(String[] args) {
    //A.test(1,3);这个语句会直接报错
    A t1 = new A();
    t1.test(3, 4);
    B.test2(3, 4);
    B t2 = new B();//当然是对static方法也可以新建一个对象,进行方法调用的
    t2.test2(3, 4);
}

}

class A {
void test(int a, int b) {
    System.out.println(a + b);
}

}

class B {
static void test2(int a, int b) {
    System.out.println(a + b);
}
}

一、问题的解决:
on-static method getLastRow() cannot be referenced from a static context问题的出现主要由于是main方法是静态的,如果你在main方法中直接调用一个非静态方法这是不合法的。那么系统就会直接报错。如上述例子中的A.test(1,3);会报错。

二、相关要求:
静态方法可以通过类来调用,其余得创建对象来调用。(且特别注意,这里不是指类的静态与否,因为类只有public和default可以进行描述)
三、相关内存分析:
就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,main方法是静态的,所以其在内存中是有代码,有方法的。但是如果直接让其在去执行非静态方法A.test(1,3);,由于其不会自动加载于内存中,所以会导致根本寻址不到其在内存中的相关方法代码,得以执行。new一个非静态方法的实例则会在内存中加载相关代码,这样一来就可以用静态方法-main去访问非静态的全部变量以及方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将相同列进行单元格合并的Java操作poi工具方法: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import java.util.ArrayList; import java.util.List; public class ExcelUtil { /** * 将相同列进行单元格合并 * @param sheet 要操作的sheet * @param startRow 开始行数,从0开始计数 * @param endRow 结束行数,从0开始计数 * @param colNum 要合并的列号,从0开始计数 */ public static void mergeCellsByColumn(Sheet sheet, int startRow, int endRow, int colNum) { if(sheet == null) { return; } if(endRow <= startRow) { return; } List<CellRangeAddress> mergeList = new ArrayList<CellRangeAddress>(); Cell preCell = null; for(int i = startRow; i <= endRow; i++) { Row currRow = sheet.getRow(i); Cell currCell = currRow.getCell(colNum); if(preCell != null && currCell != null && preCell.toString().equals(currCell.toString())) { CellRangeAddress cellRangeAddress = null; if(mergeList.size() > 0) { cellRangeAddress = mergeList.get(mergeList.size() - 1); int lastRowNum = cellRangeAddress.getLastRow(); if(lastRowNum == i - 1) { int lastColNum = cellRangeAddress.getLastColumn(); cellRangeAddress.setLastRow(i); cellRangeAddress.setLastColumn(lastColNum); } else { cellRangeAddress = new CellRangeAddress(i - 1, i, colNum, colNum); mergeList.add(cellRangeAddress); } } else { cellRangeAddress = new CellRangeAddress(i - 1, i, colNum, colNum); mergeList.add(cellRangeAddress); } } preCell = currCell; } for(CellRangeAddress cellRangeAddress : mergeList) { sheet.addMergedRegion(cellRangeAddress); } } } ``` 该方法的核心是遍历相同列中的每个单元格,如果前一个单元格和当前单元格的内容相同,则将它们合并为一个单元格。使用该方法之前,需要先导入Apache POI库,并将需要操作的Sheet对象作为参数传入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值