2010-08-16 2 views
3

Я делаю импорт полного имени пакета/java-файла, и если я делаю <classname>.<method>, ИНОГДА Я могу получить его для доступа - в других случаях я получаю много разговоров о can't use a static in a non static.Android/Java - Как мне вызвать функцию в отдельном * .java файле?

Я признаю, что я новичок в Java, так что мне нужно делать? Сначала вызовите экземпляр класса, а затем вызовите мои методы? Я довольно смущен этим, так как хочу поместить все свои «функции» в файл FunctionsList.java и весь свой основной Activity (UI) в файл MyActivity.java.

Например:

<MyActivity.java> 

import com.example.FunctionsList; 

private class MyActivity extends Activity { 
    FunctionsList.function(); 
} 

9/10 раз я получаю, что статический/без статической ошибки.

Если я поместил все свои функции в MyActivity.java, у меня возникли проблемы! Кто-нибудь поможет мне в том, что я предполагаю, это основная проблема новичка Java?

+0

Публикация кода может помочь сообществу помочь вам с проблемой – Woot4Moo

+3

Я думаю, вам стоит прочитать об объектно-ориентированном программировании – Falmarri

+0

Я исхожу из очень сильного процессуального фона, и я не программирую почти десятилетие. поэтому я изучаю то, как я всегда учился лучше - сначала погрузившись в голову! – John

ответ

13

Вот пример, который, надеюсь, поможет вам немного.

public class MyFunctionClass { 

    public String myFunction() { 
     return "This is an instance function."; 
    } 

    public static String myStaticFunction() { 
     return "This is a static function."; 
    } 

} 

Тогда в вашей деятельности у вас есть что-то вроде этого.

public class MyActivity extends Activity { 

    @Override 
    public void onCreate() { 

     // If you want to call your static function, you do not 
     // require an instance of a MyFunctionClass object. 
     String myStaticString = MyFunctionClass.myStaticFunction(); 

     // If you want to call your instance function, then you need 
     // to create a MyFunctionClass first. 
     MyFunctionClass variableName = new MyFunctionClass(); 
     String myInstanceString = variableName.myFunction(); 
    } 
} 

Как уже упоминалось Джон, вы, вероятно, сэкономить некоторое разочарование, если вы читаете на объектно-ориентированном программировании перед погружением в. Есть некоторые базовые вещи, что новый программист нужно будет понять, прежде чем погрузиться в. Хорошо удачи!

+0

Точно! Это на 100% именно то, что мне нужно! Это меня сбило с толку, так как я не понимал, почему, возможно, сначала мне нужно создать MyFunctionClass. Так что я должен был бы назвать MyFunctionClass глобальным в моей Activity.java, а затем передать любую из моих публичных функций через (используя вашу нотацию) variableName.myFunction. Спасибо, классная структура дает мне гораздо больше смысла! – John

+0

Рад помочь. Слово предостережения с классом, полным статических функций (если вы решите сделать это в будущем): Обязательно подумайте о добавлении синхронизированного модификатора в объявление функции. Если вы одновременно вызываете статические функции из разных потоков, вы можете столкнуться с проблемами. Опять же, удачи в вашем проекте. http://www.janeg.ca/scjp/threads/synchronized.html – bporter

+0

Обычно я использую версию, использующую логическое isRunning, если мой пользовательский интерфейс будет получать доступ к чему-то с определенной пользователем скоростью, но это выглядит как более эффективный способ сделать это! – John

3

Если вы хотите использовать нестатический метод, вы должны иметь экземпляр класса для вызова метода. Если вы хотите использовать статический метод, вам не нужен экземпляр.

В качестве примера предположим, что вы попытались позвонить String.length() - что это может вернуть? Он пытается найти длину что-то, но вы не указали номер , который вам интересует строка. То же самое верно для других методов экземпляра - результаты обычно будут зависеть от того, на какой объект вы их вызываете , и именно поэтому они - методы экземпляра для начала.

Как и в сторону, я бы сильно рекомендуем вам изучить основы Java первых, перед тем пытается использовать Android. Таким образом, когда вы сталкиваетесь с действительно сложными проблемами, вам не придется задаваться вопросом, является ли это частью Android или является простой ошибкой Java. См. my answer on a related question для получения дополнительной информации об этом.

+0

Я понимаю, откуда вы родом, но я чувствую, что попал в большинство основ. Я уже написал 2 полных приложения для Android, которые делают именно то, что я ожидаю от них, но все функции и т. Д. Содержатся в одном файле Activity.java, и это просто мешает мне следовать. У меня сильное чувство, что проблема заключается в просто отсутствии опыта в полном режиме ООП, поэтому мне нужно немного узнать о том, как работает ООП. – John

+1

@ Джон: Ну, я бы назвал это одним из самых фундаментальных вещей, чтобы понять на Java, поэтому мой совет остается. Я предлагаю вам исследовать ООП в консольном приложении тоже ... это намного проще сделать, чем в эмуляторе телефона. –

+0

@John Также обратите внимание, что Java, как язык, почти заставляет вас структурировать ваш код объектно-ориентированным способом. Вы можете попытаться бороться с ним, но это просто усложнит жизнь. В отличие от C++ или Python, Java очень ограничена в поддержке нескольких парадигм программирования (лучше или хуже). – Santa

Смежные вопросы