Q:

kind of instance variable changed in method

class Appthin
    @fileDir = ["a","b"]
    puts @fileDir.class
    def findclass
        puts @fileDir.class
        checkFiles(@fileDir)
    end
end

input
Array
NilClass

why they are different, it confused me.  

A:

This is because variables starting with an @ symbol are instance variables, but when you're first calling it, there isn't an instance of Appthin initialized.  
When you refer to an instance variable, it selects self and sets an instance variable for that.  
If you're calling an instance variable from the body of your class, then self is the class itself, which is an instance of Class, but not an instance of Appthin. 

The solution to your problem depends on what you're trying to do:
If you want to set a variable in the class body, which is accessible to all instances of the class, I'd use a constant. 
class Appthin

  FILE_DIR = ['a', 'b']

  def find_class
    puts FILE_DIR
  end

end

If you're trying to set a variable belonging to a specific instance of Appthin, which can then be changed, set it in the initialize method:
class Appthin

  def initialize
    @file_dir = ['a', 'b']
  end

  def find_class
    puts @file_dir
  end

end

